`

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();
    }
}
分享到:
评论

相关推荐

    AbstractFactory 抽象工厂

    抽象工厂(Abstract Factory)模式是设计模式中的一种创建型模式,它提供了一种...在阅读提供的博客文章《AbstractFactory 抽象工厂》和研究压缩包中的相关文件时,你可以深入学习到更多关于这个模式的实践和应用场景。

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。

    Abstract_Factory抽象工厂

    Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂

    对设计模式—Abstract Factory模式的认识

    Abstract Factory模式的核心在于抽象工厂(Abstract Factory)和具体工厂(Concrete Factory)。抽象工厂定义了一个用于创建一系列相关或相互依赖对象的接口,而具体工厂则实现了这些接口,负责生产实际的对象。这种...

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...

    设计模式C++学习之抽象工厂模式(AbstractFactory)

    在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...

    C# 抽象工厂 AbstractFactory.rar

    这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...

    java设计模式之抽像工厂详解

    `AbstractFactory` 是抽象工厂,`ConcreteFactory1` 和 `ConcreteFactory2` 是具体工厂,分别创建不同产品族的实例。 ### 应用场景 - 当系统需要创建一组相关或相互依赖的对象,且这些对象的类可能在运行时动态...

    抽象工厂AbstractFactory

    抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。这种模式是基于对象的抽象,而不是具体的类,因此,它允许创建一系列相关的对象,而无需指定...

    李建忠 C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

    **抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...

    设计模式之Abstract Factory模式和代码实现

    总的来说,Abstract Factory模式在本文中的应用展示了如何通过接口和工厂类来管理复杂对象的创建,使得代码更加模块化,易于维护和扩展。在设计角色系统时,这样的设计模式能够确保每个角色具备其种族特有的属性,...

    AbstractFactory案例代码

    总结来说,“AbstractFactory案例代码”提供的是一种灵活的解决方案,它通过抽象工厂模式实现了数据访问层与具体数据库实现的解耦,使得在不同的数据库系统之间切换变得容易,同时保持了分层架构的清晰性和可维护性...

    创建型-抽象工厂模式(Abstract Factory)

    1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...

    C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

    1. **抽象工厂接口(Abstract Factory)**:定义一个创建对象的接口,但不指定具体的实现。在C#中,这通常表现为一个接口,如`IAbstractFactory`。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...

    工厂方法和抽象工厂——Factory Method & Abstract Factory

    在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...

    抽象工厂模式abstractFactory

    public class WindowsFactory implements AbstractFactory { @Override public Button createButton() { return new WindowsButton(); } @Override public Window createWindow() { return new ...

    AbstractFactory.rar抽象工厂

    在“AbstractFactory.rar”这个压缩包中,我们可以预想包含了一个简单的示例,用来演示抽象工厂模式的基本概念和应用。 抽象工厂模式的核心在于“工厂”,在软件工程中,工厂是负责创建对象的类或接口。在这个具体...

    走进设计模式之抽象工厂(Abstract Factory)

    1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...

    C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) (Level 300)

    1. **抽象工厂(Abstract Factory)**:定义一个创建对象的接口,但不指定具体的实现。在C#中,这通常表现为一个接口,如`IAbstractFactory`。 2. **具体工厂(Concrete Factory)**:实现了抽象工厂接口,负责创建...

    AbstractFactory模式C++实现

    总的来说,AbstractFactory模式在C++中的实现充分利用了面向对象的特性,如抽象类、继承和多态,使得系统具有更好的灵活性和扩展性。通过这种方式,我们可以轻松地替换或增加新的产品族,而不会对原有代码造成太大的...

Global site tag (gtag.js) - Google Analytics