问题引出:

Android developer都写过AlertDialog,用法是先new 一个builder,然后往builder里设置属性的值,最后调用build得到类实例,完成抽象出来的类的实例化。

一个类的实例化为什么不是简单的new 对象,为什么要使用这种builder模式去build呢?


难写、难读、难维护 的重叠构造器:

Dialog中需要设置必要的参数ignorebutton、positivebutton,和可选的title、content、icon参数,这样就存在不止一个构造函数,类似

new Dialog(ignorebutton, positivebutton);

new Dialog(title, ignorebutton, positivebutton);

....

code中常有一个类有多个构造函数,构造函数的参数个数一般递增,层层调用,我们叫他重叠构造器模式(telescoping constructor)

参数个数少用这个不会有问题,参数个数多了,创建构造函数时,写参数会让人头疼,修改参数会让人很难维护。

易维护、难一致的JavaBean:

使用JavaBean的方式可以避免传参数不知道对应哪个字段、修改参数类型容易对应错的问题。在JavaBean的setter方法中明确了对应的字段和类型。省去了重叠构造方法。

但JavaBean也有他的缺陷,JavaBean对象可以随时调用setter方法进行设置,这会让Bean缺乏一致性、也就是类的实例的一致性没法保证了。特别是在多线程情况下,会出现很难分析的bug。

1 classBean{
2 intx,
3 inty,
4setx(){}
5setY(){}
6}

更多相关文章

  1. javaScript函数中执行C#代码中的函数
  2. JavaScript unshift()函数移入数据到数组第一位
  3. Java 8 新特性-菜鸟教程 (3) -Java 8 函数式接口
  4. java socket参数详解:TcpNoDelay
  5. 在spring 中如何注入map,set,list,property等参数
  6. 如何将动态参数传递给jquery函数
  7. Java多线程六:线程优先级和yield()让步函数
  8. 使用字符串参数调用AndroidJni静态方法。
  9. Java开发水吧点饮品系统(顶层父类对象做接口参数)

随机推荐

  1. php round函数的实际应用(附示例)
  2. PHP自定义函数xmlToArray的实例解析
  3. 在php 中使用PDO MySQL的扩展
  4. substr函数在php中截取部分字符串(附详解)
  5. php中Date函数和时间戳函数及它们之间格
  6. 集结php常用前端语法
  7. register_shutdown_function函数在php中
  8. 异步执行PHP任务fsockopen的干货
  9. 包含文件include和require在php中的区别(
  10. PHP后端语言与前端JS语法的区别详解