静态工厂方法代替构造器的总结

一、静态工厂方法与构造器不同的第一大优势在于,它们有名称。
1. 方法的签名
(1)定义: 方法签名 由方法名称和一个参数列表( 方法的 参数的顺序和类型)组成。
(2)注意: 不包括它的返回类型以及访问修饰符。

(3)应用场景:重载和重写,构造器


2.重载与重写的区别
(1)作用范围:重写是基于父子类间的继承关系,子类通过重写覆盖父类的某个方法;重载则是某个类可以有多个同名方法,属于类的多态。
(2)要求:重载要求方法名相同,不限定参数与返回值的形式;重写则要求两个方法的方法签名相同,修饰符,范围相同或小于父类的范围。

3.对这一优势的总结:
(1)场景:当一个类需要提供多个构造器时,一般通过不同的形参类型的顺序加以区分会增加调用者的接入成本,即调用者不知道该调用哪个构造。
(2)注意:一个类只能有一个指定签名的构造器。
(3)解决方法:对于这种场景,可考虑用静态工厂方法代替构造器,将静态工厂的方法与构造方法一一对应起来,本质上就是对构造方法进行封装。
(4)存在问题:使用了静态工厂方法代替构造器,那么构造器的访问属性是public还是private,如果是private的话就会出现该类无法被继承。

二、静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。
1.单实例对象(或静态单实例对象)
(1)好处:降低了重复构造对象实例开销(如内存的分配),延长了对象的生命周期。
2)应用场景:全局共享的对象、单例模式。

2. 对这一优势的总结:

(1)能控制对象的创建,即可以返回给调用者该类的静态实例或新的实例或旧的实例,本质上就是复用实例。

(2)应用场景:频繁重复创建相同的对象,且该对象的创建开销比较大时,会提升性能。


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

1.基于接口的框架:
(1)好处:基于接口的框架最大的好处是灵活,通过静态工厂方法为接口提供各种实现对象实例
(2)应用场景:服务提供者框架

2. 服务提供者框架(Service Provider Framework
(1)定义:多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把它们从多个实现中解耦出来,服务提供者的改变对它们的客户端是透明的,这样提供了更好的可扩展性
(2)组件:服务接口、服务提供者注册接口、服务访问接口和服务提供者接口
(3)关系:服务接口(Service)制定一套标准;由服务提供者(ServiceProvider)向系统(ServiceManager,管理注册和提供服务访问接口)进行注册(register Provider)并实现该服务接口;客户端(Client)通过服务访问接口可获取到服务。对于客户端来讲服务提供者是透明的,即客户端与服务提供者是独立的,不存在耦合。
(4)应用场景:JDBC、JMS

3.对这一优势的总结:提供接口,对客户端隐藏具体实现,达到解耦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值