DODONG

博客园 首页 新随笔 联系 订阅 管理
// 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();
  }
}
posted on 2006-10-24 23:16  DODONG  阅读(210)  评论(0编辑  收藏  举报