Abstract Factory 抽象工厂模式

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

你可能感兴趣的:(java)