抽象工厂模式
<设计模式其实很简单>笔记
提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类。
②生产面包和披萨
--定义一个 接口 IFactory ,里边有 生产面包 和 生产披萨 的方法
interface IFactory {
BreadMaker CreateBread( );
//增加了一个返回类型为PizzaMaker的接口方法
PizzaMaker CreatePizza( );
}
--白面包工厂
public class WhiteBreadFactory implements IFactory{
@Override
public BreadMaker CreateBread(){
return new WhiteBread( );
}
@Override
public PizzaMaker CreatePizza(){
return new WhitePizza( );
}
}
③适用的地方:
--一个系列要独立于它的产品的创建、组合和表示时。
--一个系列要由多个产品系列中的一个来配置时。
--当要强调一系列相关的产品对象的设计以便进行联合使用时。
--当要提供一个产品类库,而只要显示它们的接口而不是实现时。
④反射与抽象工厂的结合
public static void main(String[] args){
PizzaMaker pizzaMaker;
System.out.println("顾客要黑面包");
IFactory breadFactory = new BlackBreadFactory();
breadMaker = breadFactory.CreateBread();
breadMaker.GetBread();
System.out.println("顾客要白披萨");
try{
Class<?> c = Class.forName("WhiteBreadFactory");
try{
breadFactory = (IFactory) c.newInstance();
pizzaMaker.GetPizza();
}
catch(Exception e) { }
}
catch(ClassNotFoundException e) { }
}
⑤缺点:
难以支持新种类的产品。新种类产品的加入需要扩展抽象工厂接口,所有接口的实现类也要改变。
⑥优点:
分离了具体的类,易于交换产品系列,有利于产品的一致性