
Item1:静态工厂方法替代构造器
优势
1.静态工厂方法可以命名
2.创建对象可控
- 构造方法每次调用都会new新对象
- 静态工厂方法创建对象时可自由控制,可每次new,可缓存
- instance-controlled=实例受控,用于确保单例
3.可以返回子类实例
- 构造器没得选,只能返回当前类型
- 静态工厂方法可以返回子类对象
4.返回对象的类型可以根据输入参数的不同而不同
- EnumSet会根据枚举类成员的个数确定返回那个具体实现类
- JumboEnumSet
- RegularEnumSet
5.静态工厂可以返回接口类型,运行时才需要实现类
劣势
1.没有公共或受保护构造方法的类不能被继承
2.相比构造器,静态工厂方法不好找
命名规约
1.from类型转换方法,接受单个参数并返回此类型的相应实例
Date d = Date.from(instant);
2.of聚合方法,接受多个参数并返回该类型的实例,并把他们合并在一起
Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING);
3.valueOf
BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);
4.getinstance返回一个由其参数 (如果有的话) 描述的实例
StackWalker luke = StackWalker.getInstance(options)
5.newInstance
Object newArray = Array.newInstance(classObject, arrayLen)
参考文献
Baeldung
Effective Java 3rd
总结
1.使用静态工厂构造对象,产生的对象是可控的。可以参加单例模式
2.构造器不用承接复杂逻辑
3.见名之义,写很多构造器会给后继者产生误导
4.一个item就可以研究好几天,贵在精,不在快
Item1:使用静态工厂方法替代构造器
原文:https://www.cnblogs.com/aibilim/p/e81016a22ab54b1a3297137137cce33d.html