静态工厂方法构造对象优缺点
来源:互联网 发布:北大西洋公约知乎 编辑:程序博客网 时间:2024/06/07 01:42
对于一个类,要获取它的一个实例,通常的做法是提供一个公用的构造函数,然而还有另一种方法,我们称之为静态工厂方法,实质上也就是一个简单的静态方法,它返回一个类的实例。其实,静态工厂方法获取对象实例,我们并不陌生,我们来看看API中的一个实例:
java.lang.Boolean类:
public static Boolean valueOf(boolean b){
return (b ? TRUE : FALSE);
}
返回一个表示指定 boolean 值的 Boolean 实例。如果指定的 boolean 值为 true,则此方法返回 Boolean.TRUE;如果为 false,则返回 Boolean.FALSE。如果不需要新的 Boolean 实例,则应优先使用此方法,而不是构造方法 Boolean(boolean)
,因为此方法有可能大大提高空间和时间性能
基于此,倒不如来探讨一下使用静态工厂方法获取类的实例的优缺点:
优点总结如下:
其一:与构造方法不同,它在被调用的时候,并不一定非得创建新的实例对象。它可以将一个预先创建好的实例缓存起来,当被调用时,就将此对象返回给客户,从而避免创建不必要的重复对象。如果一个程序需要频繁的创建相同的对象,并且创建对象的代价很昂贵,则这项技术可以极大的提高空间和时间性能。
其二:与构造方法不同,静态工厂方法有更清晰的名称表达。例如:BigInteger(int bitLength, int certainty, Random rnd) 它返回的可能是一个素数,然而使用一个如BigInteger.probablePrime的静态工厂方法,表达显然更加清晰。如果一个类,有多个构造方法,并且他们具有相同的原型特征,那么你应该考虑用静态工厂的方法来代替一个或多个构造方法,并慎重的选择它们的名字,以清晰的表达它们的不同。
其三:与构造方法不同,它可以返回一个原返回类型的一个子类对象。这样,我们在选择返回对象类型的时候就有了更大的灵活性。这种灵活性的一个应用时,一个API可以返回一个对象,同时又不使该对象的类成为公有的。以这种方式将具体的实现类隐藏起来,可以得到一个简洁的API。这项技术非常适用于基于接口的框架结构,因为在这样的框架结构中,接口成为静态工厂方法的自然返回类型。
缺点总结如下:
其一:类如果不提供公有的或受保护的构造方法,就不能被子类化。对于这一点,我还没弄得太明白,我觉着这并非静态工厂方法的一个缺点啊,如果一个类只提供了私有的构造方法,即使是通过构造方法也不能将其实例化啊。还望各位指教
其二:它与其他的静态方法并没有两样。它是对规范的一种背离
- 静态工厂方法构造对象优缺点
- 静态工厂方法代替构造函数的优缺点
- Java中用静态工厂方法代替构造器的优缺点
- 静态工厂方法的优缺点分析
- 静态工厂方法优缺点个人理解
- 优先用静态方法创建对象,考虑用静态工厂方法代替构造器
- 静态工厂方法和构造方法
- Spring开发之静态工厂创建对象+动态工厂创建对象+构造方法创建对象+set方法注入+构造方法注入
- 构造器和静态工厂方法
- 用静态工厂方法代替构造函数
- 静态工厂方法与构造器
- 静态工厂方法与构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 采用静态工厂方法替代构造器
- 静态工厂方法VS构造器
- effective--构造器和静态工厂方法
- 用静态工厂方法代替构造器
- JAVA反射机制事例一
- [转载]Symbian开发系列 - 入门篇
- 的确恶搞:教你调戏QQ好友
- 关于TS的解析
- access IIf函数
- 静态工厂方法构造对象优缺点
- 如何在win6.0 进行汉化
- [转载]移动开发资源集锦
- 设计模式-原型设计模式(Prototype)
- microsoft bizspark 邮件
- 11月27号,看了看代码;晚上接到电话
- [转载]Oracle开发与使用文章收藏
- .NET中如何在调用COM时得到返回参数值System.Type.InvokeMember的使用
- 英国研究称遛狗2个月锻炼效果等同健身1年