考虑用静态工厂方法替代构造器(1)

一、java语言支持四种类型:java

(1)接口(interface):设计模式

(2)类(class):数组

(3)数组(Array):缓存

(4)基本类型(primitive):惟一非引用类型(reference type)框架

二、方法签名:包括方法名称、参数,不包括返回值;设计

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《对象

三、本条静态工厂方法与设计模式的工厂方法不是对应等价的;继承

  • 该静态方法将boolean基本类型值转换成Boolean对象引用
  • 类能够经过静态工厂方法提供他的客户端,而不是构造器

四、静态工厂方法比构造器优点接口

(1)第一大优点:有名称:it

  • 构造器参数没有确切描述返回的对象,有名称的静态工厂更容易使用,易于阅读;
  • 当须要带有相同签名的构造器时,使用静态工厂代替构造器,使用名称区别他们;

(2)没必要每次调用的时候建立一个新对象:

  • 不可变类 (见15条)使用预先建立好的实例(缓存建立实例)进行重复利用
  • 不可变类:实例不可被修改类
  • 避免没必要要建立重复对象;
  • 实例受控的类 静态工厂能为重复调用返回相同对象
  • 有助于严格控制某时刻,哪些实例应该存在
  • 能够确保是一个Singleton或者是不可实例化的
  • 不可变类能够确保不会存在两个相等的实例

(3)静态工厂方法能够返回原返回类型的任意子类型,更加灵活

  • API返回对象,对象的类又不会变成公有
  • 适用于基于接口的框架
  • 基于接口的框架,包含静态工厂方法不可实现类
  • Collection FrameWork集合接口有32个实现,采用上述方法(不可实例化类Collections导出)
  • Collections API导出比32个独立公有导出,实现起来小得多
  • API数量少,概念意义也少

静态工厂方法返回的对象所属的类,在编写工厂方法是能够不存在

  • 服务提供者框架的基础:如JDBC
  • 服务提供者框架:多个服务提供者实现一个服务,系统为客户端提供多个实现,并使之解耦

服务提供者框架:

  • 组件1服务接口:提供者实现
  • 组件2提供者注册API:系统用来注册实现的
  • 3服务访问API:客户端用来获取服务实例的
  • 4服务提供者接口(可选):提供者建立服务实例;若无,反射实例化便可

服务提供者能够有无数变种

  • 服务访问API能够利用适配器,返回更加丰富服务接口

(4)第四大优点:建立参数化类型实例,代码更加简介

五、静态工厂方法主要缺点一:

  • 类没有公有或受保护构造器,不能被子类化
  • 这样鼓励程序使用组合,不是继承<16条>

六、缺点二:与其余的静态方法没有任何区别

相关文章
相关标签/搜索