• 设计模式---工厂方法


    http://www.cnblogs.com/forlina/archive/2011/06/21/2086114.html

    http://blog.csdn.net/ipqxiang/article/details/1955677

    抽象工程 uml图

    // Abstract Factory pattern -- Structural example  
    using System;
    
    // "AbstractFactory"
    abstract class AbstractFactory
    {
      // Methods
      abstract public AbstractProductA CreateProductA();
      abstract public AbstractProductB CreateProductB();
    }
    
    // "ConcreteFactory1"
    class ConcreteFactory1 : AbstractFactory
    {
      // Methods
      override public AbstractProductA CreateProductA()
      {
        return new ProductA1();
      }
      override public AbstractProductB CreateProductB()
      {
        return new ProductB1();
      }
    }
    
    // "ConcreteFactory2"
    class ConcreteFactory2 : AbstractFactory
    {
      // Methods
      override public AbstractProductA CreateProductA()
      {
        return new ProductA2();
      }
    
      override public AbstractProductB CreateProductB()
      {
        return new ProductB2();
      }
    }
    
    // "AbstractProductA"
    abstract class AbstractProductA
    {
    }
    
    // "AbstractProductB"
    abstract class AbstractProductB
    {
      // Methods
      abstract public void Interact( AbstractProductA a );
    }
    
    // "ProductA1"
    class ProductA1 : AbstractProductA
    {
    }
    
    // "ProductB1"
    class ProductB1 : AbstractProductB
    {
      // Methods
      override public void Interact( AbstractProductA a )
      {
        Console.WriteLine( this + " interacts with " + a );
      }
    }
    
    // "ProductA2"
    class ProductA2 : AbstractProductA
    {
    }
    
    // "ProductB2"
    class ProductB2 : AbstractProductB
    {
      // Methods
      override public void Interact( AbstractProductA a )
      {
        Console.WriteLine( this + " interacts with " + a );
      }
    }
    
    // "Client" - the interaction environment of the products
    class Environment
    {
      // Fields
      private AbstractProductA AbstractProductA;
      private AbstractProductB AbstractProductB;
    
      // Constructors
      public Environment( AbstractFactory factory )
      {
        AbstractProductB = factory.CreateProductB();
        AbstractProductA = factory.CreateProductA();
      }
     
      // Methods
      public void Run()
      {
        AbstractProductB.Interact( AbstractProductA );
      }
    }
    
    /// <summary>
    /// ClientApp test environment
    /// </summary>
    class ClientApp
    {
      public static void Main(string[] args)
      {
        AbstractFactory factory1 = new ConcreteFactory1();
        Environment e1 = new Environment( factory1 );
        e1.Run();
    
        AbstractFactory factory2 = new ConcreteFactory2();
        Environment e2 = new Environment( factory2 );
        e2.Run();
      }
    }
    

      

  • 相关阅读:
    前端方便面
    在页面未加载完之前显示loading动画
    块级格式化上下文(BFC)
    css预编译--sass进阶篇
    IPhoneX网页布局简介
    kotlin回调函数作为参数block: T.() -> Unit和block: () -> Unit的区别
    flutter显示参数提示的快捷键
    LinuxC线程pthread线程同步进程同步-互斥量、信号量、条件变量、读写锁、文件锁
    flutter实现页面跳转的两种路由
    android开发FontMetrics的理解
  • 原文地址:https://www.cnblogs.com/wjw334/p/3578309.html
Copyright © 2020-2023  润新知