手游建筑美术资源_建筑商和机械手

手游建筑美术资源

下面是命名的OOP方法,这我想在我的代码遵循一个简单的原则:这是一个动词 ,如果它操纵 ,这是一个名词 ,如果它的基础之上 。 而已。 两者之间什么都没有。 诸如saveFile()getTitle()不适合使用,必须重命名和重构。 此外,“操作”的方法必须始终返回void ,例如print()save() 。 让我解释。

首先,我必须说,这种想法与Bertrand Meyer在他的《面向对象的软件构造》一书中提出的想法非常相似,他在书中提出,我们将一个对象的方法分为两个明显分开的类别:查询和命令。

这个原理背后的思想是很哲学的。 让我们从构建器开始,这些构建器应该创建或找到一个对象然后返回它。 假设我有一个书店,请我给我一本书的名字:

interface Bookshelf {Book find(String title);
}

显然,它是一个“构建者”(或用迈耶的术语来说是一个“查询”)。 我要一本书,这本书已经送给我了。 但是,问题出在方法的名称上。 它被称为“查找”,这意味着我知道如何处理这本书。 将会发现。

但是,这不是我们应该如何对待对象的方式。 我们绝不能告诉他们如何做我们希望他们做的工作。 取而代之的是,我们必须让他们决定是要找到,构造这本书,还是从内存缓存中取出这本书。 查询时,我们必须说出要查找的结果,然后让对象决定如何构建该结果。 此方法更合适的名称是book()

interface Bookshelf {Book book(String title);
}

经验法则是:构建者始终是名词。 如果该方法返回某些内容,则必须为名词。 最好其名称应说明该方法返回的内容。 如果是一本书,则将其命名为book() 。 如果是文件,则调用方法file()等。以下是一些好的构建器示例:

interface Foo {float speed(Actor actor);Money salary(User user);File database();Date deadline(Project project, User user);
}

相反,以下是一些名称不正确的生成器的示例:

interface Foo {float calculateSpeed(Actor actor);Money getSalary(User user);File openDatabase();Date readDeadline(Project project, User user);
}

在构建者名称中没有动词的位置!

顺便说一句,不仅是名字。 由于其名称不包含动词,因此构建器不应对封装的实体进行任何修改。 它只能创建或找到某些东西并将其返回。 就像纯函数一样 ,它一定不能有任何副作用。

接下来,有“操纵者”(或用迈耶的术语来说是“命令”)。 它们为我们做了一些工作,修改了对象封装的实体。 它们与构建者相反,因为它们实际上是对由对象抽象的世界进行更改。 例如,我们要求Bookshelf向其添加一本新书:

interface Bookshelf {void add(Book book);
}

该方法将书籍添加到存储中。 我们不知道存储将如何修改。 但是我们知道,由于方法的名称是动词,因此会进行修改。

而且,操纵器不得返回任何东西。 我们将其视为回应的类型始终是void 。 这主要是为了将代码的命令性部分与声明性部分分开。 我们要么接收对象,要么告诉他们该怎么做。 我们绝不能将这些活动混为一谈。

这些规则的目的是使代码更简单。 如果您遵循它们,并且所有构建器仅返回对象,而机械手仅修改世界,则整个设计将变得更易于理解。 方法将更小,其名称更短。

当然,通常很难找到这些名称。 有时,您可能想从操纵器返回某些东西,或者让您的构建器进行一些更改,例如对缓存进行更改。 尝试抵制这种诱惑并坚持原则:方法要么是构建器,要么是操纵器,中间没有东西。 上面的示例相当原始,现实生活中的代码要复杂得多。 但这就是原理将帮助我们的事情-使代码更简单。

我也知道名词/动词原则,该原则建议始终将类命名为名词,并将其方法命名为动词。 我认为这是一个错误的主意,因为它不会将制造商与操作员区分开,并鼓励我们始终根据命令性指令进行思考。 我相信,即使我们有时不得不从其他对象获取它们,而不是通过构造函数实例化它们,OOP也必须更多地涉及对象的声明性组合。 这就是为什么我们在大多数情况下确实需要构建器的原因,并且还必须看到它们与其他方法(操纵器)之间的明显区别。

翻译自: https://www.javacodegeeks.com/2018/08/builders-and-manipulators.html

手游建筑美术资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL二进制日志文件的用法_数据恢复

文章目录开启二进制日志功能关闭/打开二进制日志记录刷新二进制日志文件查看二进制日志文件的存储位置利用二进制日志文件恢复数据的本质二进制日志提取/导出到脚本文件中查看当前二进制日志的最后一个位置查看二进制日志文件的内容执行 SQL 脚本文件以恢复数据二进制日志分析指…

启动weblogic需要账号密码问题

<Server is Running in Production Mode and Native Library(terminalio) to read the password securely from commandline is not found.> 解决方法 在weblogic路径下创建 \weblogic11\user_projects\domains\base_domain\servers\AdminServer\security 目录下创建bo…

mysqlbinlog: [ERROR] unknown variable ‘default-character-set=utf8mb4‘

错误提示&#xff1a; [roothtlwk0001host ~]# mysqlbinlog /var/lib/mysql/mybinlog/mysql-bin.000004 mysqlbinlog: [ERROR] unknown variable default-character-setutf8mb4原因&#xff1a; mysqlbinlog 这个工具无法识别 binlog 中的配置中的 default-character-setutf8m…

Mybatis一对一结果映射

目录结构 创建数据库相应的表 一个账户对应一个用户 accout CREATE TABLE account (aid int(11) NOT NULL AUTO_INCREMENT,accountname varchar(20) DEFAULT NULL,money float(10,2) DEFAULT NULL,userId int(11) DEFAULT NULL,PRIMARY KEY (aid),KEY userId (userId),CONSTR…

lambda表达式java_Lambda表达式Java教程

lambda表达式java在本文中&#xff0c;我们提供了全面的Lambda Expressions Java教程。 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是Java 8中引入的最好的功能之一。Lambda表达式被认为是Java进入函数式编程世界的第一步 。 可以将其视为无需类即可创建的函数…

MySQL命令之mysqlhotcopy -- 热备份

文章目录命令介绍命令格式安装 mysqlhotcopy常用选项命令介绍 mysqlhotcopy 只是简单的缓存写入和文件复制的过程&#xff0c;其使用 LOCK TABLES、FLUSH TABLES 和 CP 来进行快速备份,占用资源和备份速度比 mysqldump 快很多很多。特别适合大的数据库&#xff0c;但需要注意的…

trackby_使用trackBy启动流程

trackby仍然沿用我的Corda Services趋势&#xff0c;我还有其他一些技巧可帮助您的CorDapp顺利工作。 这次&#xff0c;我们将重点关注使用trackBy从服务内部启动流以及如果您不小心可能会引发的离散问题。 这应该是一个相对简短的职位&#xff0c;因为我可以依靠以前的职位&a…

SQL查询语句的排序

order by column1 asc, column2 desc -- 按column1升序排序&#xff0c;若column1值相同&#xff0c;则按column1降序排序asc&#xff0c;ascend 的缩写&#xff0c;表示正序&#xff0c;即升序&#xff0c;从小到大&#xff0c;可以省略&#xff0c;默认的 desc&#xff0c;de…

SpringBoot创建项目入门案例

目录结构 一、创建SpringBoot项目 1.创建骨架名称 2.给项目命名 3.配置pom.xml文件 4.MySql的驱动包 5.自动生成的pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xs…

apache spark_Apache Spark Job的剖析

apache sparkApache Spark是通用的大规模数据处理框架。 了解spark如何执行作业对于获取大部分作业非常重要。 关于Spark评估范式的简要介绍&#xff1a;Spark使用的是惰性评估范式&#xff0c;在该范式中&#xff0c;Spark应用程序在驱动程序调用“ Action”之前不会执行任何…

MySQL常用权限的解释

文章目录全局管理权限数据库/数据表/数据列权限特别的权限全局管理权限 FILE: 在MySQL服务器上读写文件。 PROCESS: 显示或杀死属于其它用户的服务线程。 RELOAD: 重载访问控制表&#xff0c;刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限 ALTER: 修改已…

No identifier specified for entity没有为实体指定标识符

异常 ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘userController’: Injection of resour…

aws jenkins_Jenkins在AWS上(第1部分)

aws jenkins这是我对PEAT UK播客的逐字记录&#xff1a; 你好&#xff0c;再一次到另一个热点。 我叫Peter Pilgrim。 我曾经是DevOps专家&#xff0c;欢迎观看另一集。 这是11 Jenkins n AWS的第一部分&#xff0c;我是一名平台工程师&#xff0c;并且是Java Champion。 在…

SELECT ... FOR UPDATE_手动加行级排他锁_行级写锁_行级独占锁

文章目录介绍加锁情况分析明确指定主键&#xff0c;并且数据真实存在&#xff0c;锁定行明确指定主键&#xff0c;但数据不存在&#xff0c;不加锁主键不明确&#xff0c;锁定整个表无主键&#xff0c;锁定整个表应用场景介绍 1.FOR UPDATE 加的锁是一种行级排他锁&#xff0c…

广义表

广义表(广义表也称为列表&#xff0c;是线性表的一种推广&#xff0c;也是数据元素的有序序列) 一、基础 1.如何设定链表结点?广义表中的数据元素可能为单元素(原子)或子表&#xff0c;由此需要两种结点:一种是表结点&#xff0c;用以表示广义表;一种是单元素结点&#xff0c;…

数据库各种锁详解

文章目录排他锁共享锁更新锁意向锁锁的粒度数据库自动加锁手动加锁各种锁之间的兼容问题排他锁 Exclusive Locks&#xff0c;英译&#xff1a;排他锁&#xff0c;简称 X 锁&#xff0c;又称为写锁或独占锁。排他锁分为表级排他锁和行级排他锁。 如果事务 T1 对数据行对象 A 加…

activiti dmn_新的DMN编辑器预览

activiti dmnWorkbench 7.13.0.Final于10月16日星期二发布&#xff0c;此版本带来了许多有趣的功能和重要的修复程序。 亮点之一是作为技术预览功能的新DMN编辑器&#xff0c;该功能仍在开发中&#xff0c;但您可以开始使用。 在本文中&#xff0c;您将学习如何启用DMN编辑器预…

MySQL的索引存储数据结构BTree和B+Tree的区别

文章目录BTree 原理示意图BTree 原理示意图BTree的树层级很少BTree 可以高效支持范围查找BTree 原理示意图 注&#xff1a;BTree 就是 B-Tree&#xff0c;实际上官方并没有 B-Tree 的说法。 BTree 原理示意图 BTree的树层级很少 BTree 的数据存在每个节点中&#xff0c;所以每…

jdk11 javafx_JDK 11上的JavaFX

jdk11 javafx在JFX第11版发布后&#xff0c;人们对JavaFX与JDK的解耦感到百感交集。 我们许多人认为现在是时候告别JavaFX并改用另一种GUI技术了&#xff0c;而另一些人对此情况感到高兴。 他们认为&#xff0c;将JavaFX与Oracle分离开来&#xff0c;并致力于将其作为开源社区驱…

配置Java环境变量

JAVA环境变量配置 一、新建系统变量 新建变量&#xff0c;找到安装目录新建一个JAVA_HOME,路径为bin目录的前一级目录。 可以安装多个JAVA版本&#xff0c;然后新建不同的JAVA_HOME名称&#xff0c;然后填写bin目录的前一级路径。 二、编辑环境变量 找到path,然后编辑%JAVA…