创建型模式
简单工厂模式
由一个基类衍生出由不同参数决定的实例。类似以前写的,在不同的参数判断条件下返回不同的实例。
需要三个角色:工厂、抽象产品、具体产品。
是静态的工厂是因为是工厂内已经对类实例化了,把实例化和对对象的使用分离开来了。
工厂
管理类,回忆下之前单单判责里的LateManger。
抽象产品
所创建的所有对象的父类,或者是公共接口
具体产品
由不同条件控制的实例,但都具有相同的接口或者是父类。创造逻辑放在工厂中。
优点
不需要关心内部运行,只需要提供一个名字和参数就可以获得想要的功能的产品对象,可以按照接口规范来调用产品对象的所有功能(方法)。
构造简单,逻辑简单。实现了对象的解耦。
缺点
- 不好维护 含有大量if-else判断条件。当需要加入新的产品的时候需要新增else if
- 聚合了抽象类的所有实例,违反了高内聚。工厂如果出事,整个系统都会有影响。
- 工厂角色无法基于继承的等级结构。
适用场景
- 逻辑简单的情况:需要实例化的对象少的时候。
- 客户不需要知道对象的创建细节,只需要知道传入的参数的时候。
实际应用
①JDK类库中广泛使用了简单工厂模式,如工具类java.text.DateFormat,它用于格式化一个本地日期或者时间。
public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale
locale);
②Java加密技术
获取不同加密算法的密钥生成器:
KeyGenerator keyGen=KeyGenerator.getInstance(“DESede”);
创建密码器:
Cipher cp=Cipher.getInstance(“DESede”);
工厂模式
比起简单工厂模式,将对产品的实例化放在工厂父类的子类来负责。实际上就是全执行了先抽象类,再继承子类。含有角色:抽象工厂、抽象产品、具体产品、具体工厂。