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

      

  • 相关阅读:
    PAT 甲级 1002 A+B for Polynomials (25 分)
    数字提取——C语言
    粒子动画——Pygame
    李白打酒——C++
    C语言输出格雷码
    特殊篮子问题——C语言暴力破解
    黑白迷宫问题——深度优先搜索算法
    最近素数问题——C语言
    巧克力分配问题——C语言
    离散数学——逻辑推理系统
  • 原文地址:https://www.cnblogs.com/wjw334/p/3578309.html
Copyright © 2011-2022 走看看