`

AbstractFactoryPattern

阅读更多

意图

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.

 

适用性

一个系统要独立于它的产品的创建、组合和表示时.

一个系统要由多个产品系列中的一个来配置时.

当你要强调一系列相关产品对象的设计以便进行联合使用时.

当你提供一个产品类库,而只想显示它们的接口而不是实现时.

 

抽象工厂模式的构成

抽象工厂角色(AbstractFactory):声明生成抽象产品的方法

具体工厂角色(ConcreteFactory):执行生成抽象产品的方法,生成一个具体产品.

抽象产品(AbstractProduct):为一种产品声明接口.

具体产品(ConcreteProduct):定义具体工厂生成的具体产品的对象,实现产品接口.

客户角色(Client):我们的应用程序,使用抽象产品和抽象工厂生成对象.

 

抽象方法模式和工厂方法模式最大的不同是:工厂方法模式的工厂角色每次只生成一个对象, 但是抽象工厂模式的工厂角色每次至少会生成两个对象或者是两个以上的对象.并且这些对象之间是有交互的,互相影响,互相依赖的关系.

 

ClassDiagram:

 

  SequenceDiagram:

 

 class Program
    {
        static void Main(string[] args)
        {
            AbstractFactory factory = new ConcreteFactory1();

            Client c = new Client(factory);

            c.Run();

            factory = new ConcreteFactory2();

            c = new Client(factory);

            c.Run();

            Console.ReadKey();
        }
    }

    class Client
    {
        private AbstractProductA a;

        private AbstractProductB b;

        public Client(AbstractFactory factory)
        {
            a = factory.CreateProductA();
            b = factory.CreateProductB();
        }

        public void Run()
        {
            b.Interact(a);
        }
    }

    /// <summary>
    /// 抽象工厂角色(用来生成抽象产品的方法)
    /// </summary>
    abstract class AbstractFactory
    {
        //创建抽象产品A相应的具体产品
        public abstract AbstractProductA CreateProductA();

        //创建抽象产品B相应的具体产品
        public abstract AbstractProductB CreateProductB();
    }

    /// <summary>
    /// 具体的工厂1
    /// </summary>
    class ConcreteFactory1 : AbstractFactory
    {
        public override AbstractProductA CreateProductA()
        {
            return new ProductA1();
        }

        public override AbstractProductB CreateProductB()
        {
            return new ProductB1();
        }
    }

    /// <summary>
    /// 具体工厂2
    /// </summary>
    class ConcreteFactory2 : AbstractFactory
    {
        public override AbstractProductA CreateProductA()
        {
            return new ProductA2();
        }

        public override AbstractProductB CreateProductB()
        {
            return new ProductB2();
        }
    }



    /// <summary>
    /// 抽象产品A
    /// </summary>
    abstract class AbstractProductA
    {

    }

    /// <summary>
    /// 具体产品A1
    /// </summary>
    class ProductA1 : AbstractProductA
    {

    }

    /// <summary>
    /// 具体产品A2
    /// </summary>
    class ProductA2 : AbstractProductA
    {

    }

    /// <summary>
    /// 抽象产品B
    /// </summary>
    abstract class AbstractProductB
    {
        //定义了与AbstractProductA交互的方法.
        public abstract void Interact(AbstractProductA a);
    }

    /// <summary>
    /// 具体产品B1
    /// </summary>
    class ProductB1 : AbstractProductB
    {
        public override void Interact(AbstractProductA a)
        {
            Console.WriteLine(this.GetType().Name + " Interact With " + a.GetType().Name);
        }
    }

    /// <summary>
    /// 具体产品B2
    /// </summary>
    class ProductB2 : AbstractProductB
    {
        public override void Interact(AbstractProductA a)
        {
            Console.WriteLine(this.GetType().Name + " Interact With " + a.GetType().Name);
        }
    }

   附件中有一个抽象工厂的示例:

   可以下载参考,下面是该示例的引用关系:

 

 

  • 大小: 59.8 KB
  • 大小: 64.2 KB
  • 大小: 7.4 KB
  • 大小: 9.9 KB
  • 大小: 11.1 KB
分享到:
评论

相关推荐

    AbstractFactoryPattern:抽象工厂模式的实现

    在`AbstractFactoryPattern-master`这个压缩包中,可能包含了示例代码,展示了如何在Java中实现抽象工厂模式。通常,你可以找到以下几个部分: - `AbstractFactory.java`:抽象工厂接口。 - `ConcreteFactory1.java`...

    AbstractFactoryPattern:抽象工厂设计模式的完整实现

    AbstractFactoryPattern抽象工厂指的是提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类如果多个类有相同的行为,但实际实现不同,则可能需要某种抽象类型作为其父类被继承,抽象类型定义了所有...

    design pattern

    包含了九种经典的设计模式示例,它们分别是:单例模式(Singleton)、策略模式(StrategyPattern)、适配器模式(AdapterPattern)、装饰者模式(DecoratorPattern)、抽象工厂模式(AbstractFactoryPattern)、观察...

    简单工厂模式和工厂方法模式

    在C++编程中,我们可以看到`AbstractFactoryPattern.cpp`和`AbstractFactoryPattern.h`这两个文件,这通常表示实现了一个抽象工厂模式。抽象工厂模式是工厂方法模式的一个扩展,它提供一个创建一系列相关或相互依赖...

    Java设计模式学习教程与案例源码.zip

    3. [抽象工厂](worthed/OriginBlog/blob/master/articles/AbstractFactoryPattern.md) 4. [建造者模式](worthed/OriginBlog/blob/master/articles/BuilderPattern.md) 5. [单例模式](worthed/OriginBlog/blob/master...

    [原创][创建型模式] 简单工厂、工厂方法、抽象工厂三种设计模式的理解

    比如,`AbstractFactoryPattern.cpp`和`AbstractFactoryPattern.h`可能包含以下代码: ```cpp class AbstractFactory { public: virtual std::unique_ptr&lt;ProductA&gt; createProductA() = 0; virtual std::...

    C#设计模式

    9. 抽象工厂模式(AbstractFactoryPattern): 当系统需要独立于产品创建和组合的变化时,应使用抽象工厂模式。它允许创建一系列相关或互相依赖的对象,而无需指定它们具体的类。 10. 单例模式(SingletonPattern...

    抽象工厂设计模式简单实例

    在给定的"NO2abstractfactorypattern"压缩包中,可能包含了不同平台(例如Windows、Linux)下的文件操作类。抽象工厂可以是`FileOperationFactory`,它声明了创建文件和目录的操作方法,如`createFile()`和`create...

    iOS 设计模式 工厂模式

    在提供的压缩包`AbstractFactoryPattern-master`中,可能包含了更多关于工厂模式的示例代码和深入解释,你可以进一步研究学习,以加深对工厂模式的理解,并将其应用到你的iOS项目中。通过熟练掌握工厂模式,你的代码...

    开发设计模式

    6. 抽象工厂模式【AbstractFactoryPattern】:提供一个接口用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂模式通过一个抽象的工厂类创建一系列相关或相互依赖的对象。 7. 门面模式【Facade...

    FactoryPattern

    在`AbstractFactoryPattern`文件中,可能存在一个抽象工厂类`AbstractFactory`,它定义了创建产品的方法,而具体的工厂类如`ConcreteFactory1`和`ConcreteFactory2`则分别实现这些方法,创建出不同类型的实例。...

    设计模式代码

    在`AbstractFactoryPattern`文件中,可能包含一个`AbstractFactory`接口,它定义了一系列创建产品的方法,如创建窗口、按钮等。然后,有具体的工厂类如`PlatformFactoryA`和`PlatformFactoryB`实现这个接口,每个...

    IOS 设计模式抽象工厂实例Demo

    在压缩包中的`DesignPattern_AbstractFactoryPattern`文件中,应该包含了实现上述描述的完整代码示例,包括协议定义、工厂类的实现、以及如何在应用程序中使用这些工厂。通过阅读和理解这些代码,开发者可以深入掌握...

    23种设计模式知识要点.pdf

    抽象工厂模式(AbstractFactoryPattern): 抽象工厂模式是创建型模式,它提供了一个接口用于创建一组相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式适用于系统中有多个产品族,而系统只消费其中某一...

    抽象工厂模式代码

    在提供的"abstractFactoryPattern"压缩包中,可能包含了以下内容: - `AbstractFactory.java`:抽象工厂接口的定义 - `ConcreteFactory1.java` 和 `ConcreteFactory2.java`:两个具体工厂类的实现,分别创建不同产品...

    工厂模式代码实现

    - **AbstractFactoryPattern类**:定义一个抽象工厂接口`GUIFactory`,包含创建窗口和控件的方法;接着创建实现`GUIFactory`的子类,如`WindowsGUIFactory`和`MacOSGUIFactory`,它们分别创建对应平台的窗口和控件。...

    《Head First 设计模式》附书源码(Java版)

    `AbstractFactoryPattern`包可能包含不同的工厂接口和实现,用于创建不同平台或环境下的对象。 4. **建造者模式(Builder)**:将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。`Builder...

    Head First设计模式源代码.rar

    "AbstractFactoryPattern"目录下的代码可能展示如何创建一系列相关对象,而无需关心它们的实现细节。 4. 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。"BuilderPattern...

    JAVA设计模式-设计模式公司出品

    4. 工厂模式(FACTORYMETHODPATTERN 和 ABSTRACTFACTORYPATTERN):工厂模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。 5. 门面模式(FACADEPATTERN)...

Global site tag (gtag.js) - Google Analytics