静态工厂方法
来源:互联网 发布:linux u盘启动 windows 编辑:程序博客网 时间:2024/06/05 21:20
说实话,毕竟半路出家,虽然工作这么久,对基础和原理的东西没有多少了解和研究,导致不管是工作还是技术都有瓶颈,于是现在想回过头,结合工作经验来巩固下基础,深入学习和研究下一些原理。最近刚好在看《Effective Java》,顺便做下学习札记。
下面进入正题,说说书中 第一条:考虑用静态工厂方法代替构造器。
先说说优缺点,
优点:
1.可以用方法名来标识,提高程序可读性;
2.不必每次调用方法的时候都创建一个对象;
3.可以返回原类型的子类型;
4.使代码变得简洁。
缺点:
1.如果没有提供public或protected的构造器,则不能子类化,即不能被继承;
2.与其他的静态方法没有什么明显的区别。
我们创建一个实例通常的做法是通过构造器new一个出来,现在书中的启示提供了另一种可能,就是用静态工厂方法,这里的静态工厂方法与设计模式中的工厂方法模式不是一个概念。通过构造器new一个实例出来并没有什么问题,而且我们大多数时候都是这么做的,但是如果重载了多个构造器的话,如果不提供API文档,那么使用者将很难使用,而静态工厂方法可以任意起名,这样就很方便知道这个方法是干什么的了,这个就是上述优点1 。
下面请看一个例子。
public class Fruits {private String info;private static final Fruits APPLE = new Fruits("苹果");private static final Fruits PEAR = new Fruits("梨");private static final Peach PEACH = new Peach();public Fruits() {}private Fruits(String info) {this.info = info;}@Overridepublic String toString() {return "水果-->" + info;}public static Fruits getApple() {return APPLE;}public static Fruits getPear() {return PEAR;}public static Fruits getPeach() {return PEACH;}}class Peach extends Fruits{@Overridepublic String toString() {return "水果-->桃";}}这个例子提现静态方法的几个优点和缺点,通过getApple()和getPear()可以创建苹果和梨的实例,并且返回的是已经创建好的实例,不用每次创建对象,通过方法名也能知道创建的是哪一种对象(水果)。例子里提供了一个public构造器,这样桃子就能继承水果类了,如果没有这个构造器那么将无法继承,getPeach()方法返回的就是Fruits类的子类了,构造器则做不到这一点,这就很灵活了,当然此例中不是很好的提现,只是做个说明罢了。从例子中也可以看出静态工厂方法只是一个普通的静态方法,与其他静态方法没有什么区别(这就是缺点2),但是我们可以通过约定或者说命名规范来标识,例如用valueOf、getInstance等方法名来作为静态工厂方法的方法名,这样容易使人知道这就是静态工厂方法,他将返回一个实例。
阅读全文
0 0
- 静态工厂 工厂方法 抽象工厂
- 静态工厂方法
- 静态工厂方法模式
- 静态工厂方法
- 静态工厂方法
- 静态工厂方法
- 静态工厂方法
- Java 静态工厂方法
- 静态工厂方法
- Java 静态工厂方法
- 静态工厂方法
- java 静态工厂方法
- 静态方法工厂模式
- 静态工厂方法讲解
- 静态工厂方法
- 静态工厂方法
- 静态工厂方法
- 静态工厂方法
- 203
- HandlerThread实现数字时钟
- String的常用方法
- Codeforces 190D Non-Secret Cypher【思维+RMQ+二分】
- BillPrint
- 静态工厂方法
- 道格拉斯-普克算法(Douglas–Peucker algorithm)---多边形逼近算法
- 高级算法日记10:图(3)
- 西子湖畔
- Lua_ uLua基础_015
- AtomicInteger类保证线程安全的用法
- 1007素数对猜想(模拟)
- Oracle11g 参数FAST_START_MTTR_TARGET的理解
- 【CVTE笔试题】数字分割