`

Abstract Factory 抽像工厂

 
阅读更多
转自:http://blog.csdn.net/zigzagsoft/article/details/2613028

Abstract Factory模式定义了如何实例化一组对象系列,这些对象可能相关可能互为利用。客户在创建的时候无须指定这些对象属于什么类型,它只需关注是谁生产的。具体生产出来的一系列对象的细节和类别则由某个工厂负责。

使用范围

  • 系统需要独立于组成它的对象系列的创建、组织和表现的时候
  • 需要组合一系列的对象,这些对象作为整体作用于一个系统的时候

使用方法

考察抽象工厂的类图

AbstractFactory类是一个系统的抽象,称之为工厂,该工厂可能多个包含细节的子类。每个工厂都必须生产同一个系列的产品组,这里为AbstractProductA和AbstractProductB。然而,每一个工厂的系列产品又有不同的实现方法或表现方法。因此ConcreteFactory1生产ProductA1和ProductA1,ConcreteFactory2生产ProductA2和ProductB2。

举例说明

假设我们要在一个应用程序中创建一个Button和一个Textbox。对于不同的系统可能创建不一样的这两个对象,Linux下的和Windows环境下的。

public abstract class Button {
    protected abstract void createShape();
}

public abstract class Textbox {
    protected abstract void createText();
}

在Linux环境下创建Button和Textbox的实现细节

public class LinuxButton extends Button{
    protected void createShape() {
        System.out.println("create Linux Button");
    }
}
public class LinuxTextbox extends Textbox{
    protected void createText() {
        System.out.println("create linux textbox");
    }
}

在Windows环境下创建Button和Textbox的实现细节

public class WindowsButton extends Button{
    protected void createShape() {
        System.out.println("create windows button");
    }
}
public class WindowsTextbox extends Textbox{
    protected void createText() {
        System.out.println("create windows textbox");
    }
}

这里是一个抽象工厂类,需要完成创建Button和Textbox的方法

public abstract class Factory {
    Button button;
    Textbox textbox;
    public abstract void createButton();
    public abstract void createTextbox();
}

Linux下的工厂角色

public class LinuxFactory extends Factory{
    public void createButton() {
        button = new LinuxButton();
        button.createShape();
    }

    public void createTextbox() {
        textbox = new LinuxTextbox();
        textbox.createText();
    }
}

Windows下的工厂角色

public class WindowsFactory extends Factory{
    public void createButton() {
        button = new WindowsButton();
        button.createShape();
    }

    public void createTextbox() {
        textbox = new WindowsTextbox();
        textbox.createText();
    }
}

到此为止,一个抽象工厂模式创建完毕。类结构图如下:

客户端的使用方法为:

public class Client {
    public static void main(String args[]){
        Factory factory = new LinuxFactory();
        factory.createButton();
        factory.createTextbox();

        factory = new WindowsFactory();
        factory.createButton();
        factory.createTextbox();
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics