设计模式之禅笔记-工厂方法模式

来源:互联网 发布:源码铺子 账号 编辑:程序博客网 时间:2024/06/06 12:46
工厂方法模式
工厂方法模式使用频率非常高。
Define an interface for creating an object,but let subclasses decide which class to 
instantiate.Factory Method lets a class defer instantiation to subclass.
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。



工厂方法模式的优点
良好的封装性,代码结构清晰。
屏蔽产品类。
工厂方法模式是典型的解耦框架。


工厂方法模式的使用场景:
工厂方法模式是new一个对象的替代品。
需要灵活的,可扩展的框架时,可以考虑采用工厂方法模式。
工厂方法模式可以用在异构项目中。
可以使用在测试驱动开发的框架下。


工厂方法模式的扩展
1.缩小为简单工厂模式
简单工厂模式(Simple Factory Pattern),也叫静态工厂模式。
缺点:工厂类的扩展比较困难,不符合开闭原则,但他仍然非常实用。
2.升级为多个工厂类
在复杂的应用中一般采用多工厂的方法,然后再增加一个协调类,避免调用者与各个子工厂交流,协调类
的作用是封装子工厂类,对高层模块提供统一的访问接口。
3.替代单例模式
public class Singleton{
//不允许通过new产生一个对象
private Singleton(){
}
}
Singleton保证不能通过正常的渠道建立一个对象,通过反射方式创建。
public class SingletonFactory{
private static Singleton singleton;
static{
try{
Class cl = Class.forName(Singleton.class.getName());
//获取无参构造
Constructor constructor = cl.getDeclaredConstructor();
//设置无参构造是可以访问的
constructor.setAccessible(true);
//产生一个实例对象
singleton = (Singleton)constructor.newInstance();
}catch (Exception e){
}
}
}
在一个项目中可以产生一个单例构造器,所有需要产生单例的类都遵循一定的规则(构造方法时private)
,然后通过扩展该框架,只要输入一个类型就可以获取唯一的一个实例。
4.延迟初始化
延迟初始化是工厂方法模式的一个扩展应用