静态工厂方法
静态工厂方法的优点
静态工厂方法的缺点
一、静态工厂方法
静态工厂方法:
替代构造器来获得一个Boolean的实例。
使用构造器:Boolean b1 =newBoolean(true);
使用静态工厂方法:Boolean b2 = Boolean.valueOf(true);
构造器:
1.构造器的名称必须和类名一致;
2.一个类中可以定义多个构造器,但是构造器的参数列表必须不同;
3.如果我们没有手动定义构造器,则java系统会提供一个默认的构造器给我们使用。一旦我们定了构造器,则系统会把构造器收回;
4.构造器的作用:实例化对象,给对象赋初始值;
5.代码游离块优先执行
二、静态工厂方法的优点
优点1:有名称
相同签名的构造器做不到,除非把参数列表的顺序做些调整,会对用户很不友好。
优点2:不必每次都创建新对象
适用于单例模式。
优点3:可以返回原类型的任何子类
适用于基于接口的框架。使API返回的对象的类是私有的(使用构造函数肯定不行)。
优点4:创建泛型类实例的代码更为简洁
请看下面两种创建泛型类实例的方式,后者比前者更为简洁。
构造器创建:Map<String, List<String>> m1 =newHashMap <String, List<String>>();
静态工厂方法创建:Map<String, List<String>> m2 = HashMap.newInstance();
前提是HashMap提供的静态工厂方法newInstance定义如下
三、静态工厂方法的缺点
1、不含public或protect的构造方法,就不能被子类化(继承)。
2、与其它普通静态方法没有区别,没有明确的标识一个静态方法用于实例化类
valueOf :返回的实例与参数值相同。只做类型转换。
of:valuefOf简洁替代,EnumSet中使用
getInstance:返回实例是通过方法参数描述,不能说与参数具有同样的值(Singleton方法没有参数,总返回唯一实现)
newInstance:像getInstance一样,但newInstance确保返回实例都与其他不同。
newType、getType:工厂方法返回对象类型,工厂方法处于不同的类的时候使用(子类)
https://blog.csdn.net/hj464171584/article/details/78903939
https://www.cnblogs.com/chenpi/p/5981084.html
https://www.jianshu.com/p/4d7a0cd36a82