工厂方法模式
工厂方法模式,即定义一个用于创建对象的接口,让子类决定实例化哪个类。
//定义抽象产品类
public abstract class Product{
public abstract void method();
}
//定义具体产品类
public class ConProduct extends Product{
public void method(){}
}
//定义抽象工厂类
public abstract class Factory{
public abstract <T extends Product> T createProduct(Class<T> c);
//泛型,所有继承Product的类
}
//具体工厂类
public class ConFactory extends Factory{
public <T extends Product> T createProduct(Class<T> c){//工厂函数
Product product=null;
try{
product=(Product)Class.forName(c.getName()).newInstance();//内省
}catch(Exception e){//异常处理}
return (T)product;
}
}
工厂方法模式封装良好,结构清晰,易于扩展。是典型的解耦框架,高层模块只需要知道产品的抽象类,符合迪米特法则和依赖倒置原则,只依赖产品类的抽象,也符合里氏替换原则。
工厂方法模式扩展
延迟初始化是工厂方法模式的一个扩展,对象创建后在类内保存引用,在下次创建对象时查找类内是否存在,有则直接取出返回
简单工厂模式Simple Factory Pattern,去除抽象工厂类,将生产函数设为static。
多工厂模式,每个具体产品对应一个共产类,类职责清晰,结构简单,但增加了扩展难度。替代单例模式,符合单一职责原则
简单工厂模式Simple Factory Pattern,去除抽象工厂类,将生产函数设为static。
多工厂模式,每个具体产品对应一个共产类,类职责清晰,结构简单,但增加了扩展难度。替代单例模式,符合单一职责原则
public class Singleton{ private Singleton(); } public class SingletonFactory{ private static Singleton singleton; static{ try{ //通过反射方式创建单例类 Class cl = Class.forName(Singleton.class.getName()); //获得无参构造 Constructor con = c1.getDeclaredConstructor(); //设置无参构造可访问 con.setAccessible(true); //产生实例 singleton = (Singleton)con.newInstance(); }catch(Exception e){//异常处理} } public static Singleton getSingleton() { return singleton; } }