第1条 考虑用静态工厂方法代替构造器(静态工厂模式)
定义:
- 像Fragment fragment = MyFragment.newIntance();这样不通过new,而用一个静态方法对外提供自身实例的方法。
优势:
- 优势1:工厂方法有名称(使用工厂产生对象,比构造器更加自由,不用专门去找使用哪一个构造器,直接通过工厂名就可以产生想要的对象),构造方法就算参数不同,new对象的时候使用的也是对象名称。
- 优势2:工厂产生的对象可以复用(相当于单例模式),如果是这样产生的对象,可以使用==代替equals,提升性能。
- 优势3:可以返回原类型的任何子类对象,可以选择更适合自己的那一个对象进行返回(里氏替换原则),而构造函数只能返回自身。
- 优势4:创建参数化类型实例的时候,可以使用泛型,使代码更加简洁,JDK1.7已经对这个方面进行了优化。
缺点:
- 缺点1:类如果不含公有的或者受保护的构造器,不能被子类化。
- 缺点2:它们与静态方法实际上没有任何区别(如,String中的valueOf(),实际上是一种类型转换方法)。
总结:
- 总结:静态工厂方法和公有构造器各有用处,我们需要理解他们各自的长处。静态工厂通常更加合适,因此,切忌第一反应就是提供公有的构造器,而不考虑静态工厂。