zoukankan      html  css  js  c++  java
  • 设计模式---工厂方法

    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();
      }
    }
    

      

  • 相关阅读:
    git/gerrit上已经删除了远程分支,本地仍然能看到的解决方法
    bat中查找文件夹下有几个某类型的文件
    ERROR 1045 (28000)问题解决
    Unsupervised Pretraining Transfers well Across Languages
    由声学特征重建语音波形-声码器的最近进展
    神经机器翻译中有用的技巧
    多语种神经机器翻译
    利用Fairseq训练新的机器翻译模型
    转:Linux 系统忘记密码 -> 修改 Ubuntu 虚拟机密码
    Linux安装与配置Tomcat
  • 原文地址:https://www.cnblogs.com/wjw334/p/3578309.html
Copyright © 2011-2022 走看看