Effective java01-静态工厂方法代替公有构造函数

优点:
①构造函数的方法名必须跟类名一样,调用方调用代码很难快速被读懂。使用工厂方法(跟设计模式的工厂方法不一样,本处指的是在目标类中直接加静态方法),则方法名就代表该方法要创建的对象的特征,调用端的调用的时候比较清楚自己要建造什么样的对象,不容易选错方法,而且代码也比较容易读懂。例如:
...
public static BigInteger probablePrime(int bitLength, Random rnd) {
......
}
...
②可以使用单例或有限多例,达到内存优化利用的目的。
例如:
...
public static Boolean valueOf(String s) {
return toBoolean(s) ? TRUE : FALSE;
}
...
③可以采用接口类的静态方法来返回要构建的对象以达到隐藏实现的目的,调用方不需要关心具体构建的是哪个实现类的对象。
④方法参数不同,返回的对象的类型也可以不同;在不同的发布版本中,静态方法返回的对象也可能有所不同。
⑤目标对象的实现类可以不存在,在真正运行时才明确,jdbc就是采用这种方式。

缺点:
①没有公共构造函数的类不能有子类。不过反过来思考,根据设计模式原则,一般鼓励用组合方式而不建议用继承方式。
②不像构造函数那样名字一定是跟类名一致,静态方法往往比较难被找到,需要编程人员肉眼一个一个方法找过去。该缺点可以通过规范化命名来尽量规避,例如get开头,intance开头、valueOf开头、create开头、new开头等等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 通常,我们使用new来创建一个对象。这应该是最简单的一种方式。但一个优秀的程序员需要考虑具体的应用场景以及性能等问...
    Ruheng阅读 784评论 0 5
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,555评论 0 6
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,837评论 0 10
  • 面对逆境的三种人 1. 放弃者:喜欢逃避和安逸。行为:退出、逃避、变卦、放弃 2. 扎营者:获得地位后停滞不前 3...
    还是太菜阅读 8,095评论 1 4