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

本文介绍了Java中静态工厂方法相较于构造器的优势,如具有名称、不受签名限制、不必每次创建新对象、可返回子类型对象等,也指出了其缺点,如不能被子类化、难以被发现,还列举了一些常见的静态工厂方法示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

境里婆娑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值