您的位置:首页 > 其它

用静态工厂方法代替构造器

2019-05-27 21:53 155 查看

1、静态工厂方法与构造器不同的第一大优势在于,它们有名称。如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读。例如,构造器Biginteger (int , int, Random )返回的Biginteger 可能为素数,如果用名为B 工ginteger.probablePrime 的静态工厂方法来表示,显然更为清楚。

2、一个类只能有一个带有指定签名的构造器。编程人员通常知道如何避开这一限制: 通过提供两个构造器,它们的参数列表只在参数类型的顺序上有所不同。实际上这并不是个好主意。面对这样的AP I , 用户永远也记不住该用哪个构造器, 结果常常会调用错误的构造器。并且在读到使用了这些构造器的代码时,如果没有参考类的文档,往往不知所云。由于静态工厂方法有名称,所以它们不受上述限制。当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器,并且仔细地选择名称以便突出静态工厂方法之间的区别。

3、静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象

4、静态工厂方法与构造器不同的第三大优势在子,它们可以返回原返回类型的任何子类型的对象

5、静态工厂的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值

6、静态工厂的第五大优势在于,方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在

缺点

1、静态工厂方法的主要缺点在子,类如果不含公有的或者受protected的构造器,就不能被子类化

2、静态工厂方法的第二个缺点在于,程序员很难发现它们

from一一类型转换方法,它只有单个参数,返回该类型的一个相对应的实例,

例如:Dated= Date . from(instant) ;

 of — —聚合方法,带有多个参数,返回该类型的一个实例,把它们合并起来,例如:

Set<Rank> faceCards = EnumSet. of (JACK , QUEEN, KING];

 valueOf一一比from 和of 更烦琐的一种替代方法,例如:

Biginteger prime = Biginteger.valueOf(Integer.MAX_VALUE);

instance 或者get Instance一-返回的实例是通过方法的(如有)参数来描述

的,但是不能说与参数具有同样的值,例如:

StackWalker luke = StackWalker.getinstance(options);

create 或者newInstance一一才象instance 或者getinstence 一样,但create

或者newInstance 能够确保每次调用都返回一个新的实例,例如:

Object newArray = Array.newInstance(classObject, arrayLen );

 getType一像getInstance 一样,但是在工厂方法处于不同的类中的时-候使用。Type 表示工厂方法所返回的对象类型,例如:

FileStore fs = Files.getFileStore(path];

D newType一象newInstance 一样,但是在工厂方法处于不同的类中的时候使用

BufferedReader br 「= Files.newBufferedReader( path);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: