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

      

  • 相关阅读:
    codeforces 519E A and B and Lecture Rooms lca倍增
    codeforces 702E Analysis of Pathes in Functional Graph 倍增
    hdu 5126 stars cdq分治套cdq分治+树状数组
    hdu 5442 Favorite Donut 最大表示法+kmp
    hdu 5446 Unknown Treasure 中国剩余定理+lucas
    hdu 5769 Substring 后缀数组
    codevs 1913 数字梯形问题 费用流
    Python for Infomatics 第13章 网页服务二(译)
    Python for Infomatics 第13章 网页服务一(译)
    Python for Infomatics 第12章 网络编程六(译)
  • 原文地址:https://www.cnblogs.com/wjw334/p/3578309.html
Copyright © 2011-2022 走看看