• 设计模式---抽象工厂


    组成

    • 抽象层
      • 抽象工厂,负责创建抽象族类产品
      • 抽象产品,负责提供抽象族类产品定义
    • 实现层
      • 具体对象,负责实现族类具体产品
      • 具体产品,负责实现族类具体产品
    • 应用层
      • 使用配置或IOC容器配置具体工厂
      • 针对抽象接口编码创建具体产品

    UML类图

    Abstract factory UML.svg

    实践

    • 一般抽象层可以通过接口或抽象类进行定义,具体选择接口或抽象类,可以根据实际情况考量
    • 抽象层一般定义在单独的基础程序集中,定义核心程序集FactoryCore.dll
    • 实现层一般定义在扩展的程序集中,依赖抽象层,定义扩展程序集FactoryCore.Extension.dll
    • 应用层针对抽象接口编程,具体如何选择实现层,可以通过配置或者DI容器进行管理

    类图

    classd1

    代码

    抽象产品

    namespace AbstractFactory.AbstractProduct
    {
        /// <summary>
        /// 族类A产品抽象
        /// </summary>
        public abstract class AbstractProductA
        {
            public abstract string Name { get; }
            public abstract void Action();
        }
    }

    抽象工厂

    namespace AbstractFactory.AbstractFactory
    {
        /// <summary>
        /// 抽象工厂类
        /// 提供抽象接口,用于创建抽象族类产品
        /// </summary>
        public abstract class ProductFactory
        {
            public abstract AbstractProductA CreateProductA();
            public abstract AbstractProductB CreateProductB();
        }
    }

    具体产品

    namespace AbstractFactory.ConcreteObject
    {
        class ProductA1 : AbstractProductA
        {
            public override string Name
            {
                get { return "ProductA1"; }
            }
    
            public override void Action()
            {
                Console.WriteLine("Action as Product A1");
            }
        }
    }

    具体工厂

    namespace AbstractFactory.ConcreteFactory
    {
        class Factory1 : ProductFactory
        {
            public override AbstractProductA CreateProductA()
            {
                return new ProductA1();
            }
    
            public override AbstractProductB CreateProductB()
            {
                return new ProductB1();
            }
        }
    }

    应用层

    namespace AbstractFactory
    {
        class Consumer
        {
            public Consumer(ProductFactory factory)
            {
                ProductFactory = factory;
                ProductA = ProductFactory.CreateProductA();
                ProductB = ProductFactory.CreateProductB();
            }
    
            public ProductFactory ProductFactory { get; set; }
    
            public AbstractProductA ProductA { get; set; }
    
            public AbstractProductB ProductB { get; set; }
    
            public void DoSomething()
            {
                ProductA.Action();
                ProductB.Action();
            }
        }
    }

    后续

    关于简单工厂和工厂方法,由于思想差异不是很大,在这里就不一一介绍了,具体可以参考:

    设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

    更多的,请参考互联网:Differences between Abstract Factory Pattern and Factory Method

  • 相关阅读:
    (10)进程---Manager数据共享
    (9)进程---JoinableQueue队列
    (8)进程---Queue队列
    (7)Pool进程池
    (6)进程---Event事件
    (5)进程--锁和信号量
    (4)进程---daemon守护进程和join阻塞
    XSLT知识点【一】
    XSL-FO知识点【一】
    XPath知识点【一】
  • 原文地址:https://www.cnblogs.com/fecktty2013/p/designpatterns-abstractfactory.html
Copyright © 2020-2023  润新知