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

      

  • 相关阅读:
    qmake理解(还可以加入Lex Yacc文件)
    如何在Qt 4程序中优化布局结构(表格讲解,很清楚)
    QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)
    Qt工具知多少(一目了然)
    分享个人如何DIY网站的经验
    推荐10款免费而优秀的图表插件
    异步上传文件
    JSON.stringify 方法
    Value Object(值对象)如何使用 EF 进行正确映射
    领域驱动设计(DDD)
  • 原文地址:https://www.cnblogs.com/wjw334/p/3578309.html
Copyright © 2011-2022 走看看