Abstract Factory抽象工厂模式
抽象工厂模式:提供接口以 创建一组 相关/ 相互依赖的对象 ,但不需要指明其具体类。
现在有以下抽象产品接口和具体产品类:
//AbstractProduct
public interface Window{
public void setTitle(String s);
public void repaint();
public void addScrollbar(…);
}
//ConcreteProductA1
public class PMWindow implements Window{
public void setTitle(){…}
public void repaint(){…}
}
//ConcreteProductA2
public class MotifWindow implements Window{
public void setTitle(){…}
public void repaint(){…}
}
抽象工厂接口和具体工厂类
//AbstractFactory
public interface AbstractWidgetFactory{
public Window createWindow();
public Scrollbar createScrollbar();
}
第一个具体产品的工厂方法:
//ConcreteFactory1
public class WidgetFactory1{
public Window createWindow(){
return new MSWindow();
}
public Scrollbar createScrollbar(){A}
}
第二个具体产品的工厂方法:
//ConcreteFactory2
public class WidgetFactory2{
public Window createWindow(){
return new MotifWindow();
}
public Scrollbar createScrollbar(){B}
}
为了客户端实现,增加一个辅助类:
public class GUIBuilder{
public void buildWindow(AbstractWidgetFactory widgetFactory){
Window window = widgetFactory.createWindow();//使用抽象工厂类分别创建两个具体产品
Scrollbar scrollbar = widgetFactory.createScrollbar();//使用抽象工厂类分别创建两个具体产品
}
}
Client客户端调用:
GUIBuilder builder = new GUIBuilder();
AbstractWidgetFactory widgetFactory = null;//定义抽象工厂接口的实例
根据要创建的“组合产品”的类型,构建不同的抽象工厂子类
if(“Motif”)
widgetFactory = new WidgetFactory2();
else
widgetFactory = new WidgetFactory1();
//具体构建
builder.buildWindow(widgetFactory);
抽象工厂模式创建多个类型的对象,创建的是产品族,而不是单一的产品。创建的不是一个完整产品,而是“产品族”(遵循
固定搭配规则的多类 产品的实例 ),得到的结果是:多个不同产品 的object ,各产品创建过程对client 可见,但“搭配”不能改变 。本质 上,Abstract Factory 是把多类产品的factory method