• 大话设计之抽象工厂模式


      今天学习到抽象工厂模式,可以将它与工厂方法模式进行对比这样来学习:


    工厂方法模式:
    一个抽象产品类,可以派生出多个具体产品类。   
    一个抽象工厂类,可以派生出多个具体工厂类。   
    每个具体工厂类只能创建一个具体产品类的实例。


    抽象工厂模式:
    多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
    一个抽象工厂类,可以派生出多个具体工厂类。   
    每个具体工厂类可以创建多个具体产品类的实例。   
        
    区别:
    工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。   

    工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

      大话中通过访问不同的数据库SQL和Access明确的阐述了抽象工厂模式的意义:

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

       下面附加抽象工厂模式的基本代码:

      

    class Program
        {
            static void Main(string[] args)
            {
                AbstractFactory factory1 = new ConcreteFactory1();
                Client c1 = new Client(factory1);
                c1.Run();
    
                AbstractFactory factory2 = new ConcreteFactory2();
                Client c2 = new Client(factory2);
                c2.Run();
    
                Console.Read();
    
            }
        }
    
        abstract class AbstractFactory
        {
            public abstract AbstractProductA CreateProductA();
            public abstract AbstractProductB CreateProductB();
        }
    
        class ConcreteFactory1 : AbstractFactory
        {
            public override AbstractProductA CreateProductA()
            {
                return new ProductA1();
            }
            public override AbstractProductB CreateProductB()
            {
                return new ProductB1();
            }
        }
    
        class ConcreteFactory2 : AbstractFactory
        {
            public override AbstractProductA CreateProductA()
            {
                return new ProductA2();
            }
            public override AbstractProductB CreateProductB()
            {
                return new ProductB2();
            }
        }
        abstract class AbstractProductA
        {
        }
    
        abstract class AbstractProductB
        {
            public abstract void Interact(AbstractProductA a);
        }
    
        class ProductA1 : AbstractProductA
        {
        }
    
        class ProductB1 : AbstractProductB
        {
            public override void Interact(AbstractProductA a)
            {
                Console.WriteLine(this.GetType().Name +
                  " interacts with " + a.GetType().Name);
            }
        }
    
        class ProductA2 : AbstractProductA
        {
        }
    
        class ProductB2 : AbstractProductB
        {
            public override void Interact(AbstractProductA a)
            {
                Console.WriteLine(this.GetType().Name +
                  " interacts with " + a.GetType().Name);
            }
        }
    
        class Client
        {
            private AbstractProductA AbstractProductA;
            private AbstractProductB AbstractProductB;
    
            
            public Client(AbstractFactory factory)
            {
                AbstractProductB = factory.CreateProductB();
                AbstractProductA = factory.CreateProductA();
            }
    
            public void Run()
            {
                AbstractProductB.Interact(AbstractProductA);
            }
        }
       下面是抽象工厂模式的结构图:


      抽象工厂模式的优缺点:

      最大的优点便是易于交换产品系列,由于具体工厂类在一个应用中需要在初始化的时候出现一次,所以就使得改变一个应用的具体工厂变得非常容易,只需要改变具体工厂即可使用不同的产品配置。第二,能让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

      编程是门艺术。。。。。。。

  • 相关阅读:
    详解瀑布流布局的5种实现方式及object-fit
    npm私服配置使用
    node快速计算md5
    ajax下载文件实现接受json数据和文件流两种形式
    mac items+sshpass实现服务器登录管理
    web前端私有化部署方案
    chrome devTool中请求各项参数含义
    electron-updater实现electron应用程序更新
    Electron-builder打包应用程序策略
    electron打包配置方案
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117992.html
Copyright © 2020-2023  润新知