工厂方法模式
定义:
定义一个用户创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
工厂方法模式的优点:
良好的封装性,代码结构清晰。
工厂模式的扩展性非常优秀。
屏蔽产品类。产品类的实现如何变化,调用者不用关心,只需要关心产品的接口,只要接口保持不变,那么上层模块就不会发生变化。
工厂模式是典型的解耦框架。
工厂模式的应用:
1.工厂模式是new一个对象的替代品,在所有需要生成对象的地方都可以使用工厂模式。
2.工厂模式可以用于异构项目
3.工厂模式可以使用在测试驱动开发
工厂模式的扩展:
1.简单工厂模式
当一个模块只需要一个工厂类,那么可以使用静态代码块来代替他。
2.升级为多个工厂类
做项目是,如果把所有的产品类的初始化都放在一个工厂方法中会使代码结构不清晰。
考虑到 代码结构清晰的问题,我们需要为每一个产品类定义一个创造者,让调用者去选择和哪一个工厂方法关联、
但是多工厂类的方法必然使得工厂类很多,调用者很不方便调用,这是需要一个协调类来封装工厂类来对高层模块提供统一的访问接口。
3.代替单例模式
一般的单例模式:
public class singleton {
private static final singleton singleton=new songleton();
private singleton(){}
public staic singleton getinstance(){
return singleton;
}
}
使用工厂的单例:
public class singleton{
//静态的构造防止外界创建对象
private sinleton(){
}
public void doSomething(){
//业务逻辑代码
}
}
//工厂类,在工厂类中进行对象的创建,需要用到反射技术
public class singletonFactory(){
private static singleton singleton;
static{
try{
//获得字节码文件
Class clazz=Class.forName(singleton.calss.getName());
//获得构造函数,静态暴力获取
Constructor constructor =clazz.getDeclaredConstructor();
//设置构造可用
constructor.setAccessable(true);
singleton=(singleton)constructor.newInstance();
}catch(Exception e){
}
}
//提供duiwaijiekou
public static singleton getInstance(){
return singleton;
}
}
4.延迟初始化(lazy initialization)
当一个对象消费完毕后,并不立即释放,工厂类保持其初始化,等待再次调用。
通过定义一个Map容器,容纳所有产生的对象,如果Map容器中已经存在,那么直接取出返回,如果没有,就根据需要的类型产生一个对象并放入Map容器中,以便下次使用。
|
|