Abstract Factory pattern -- Structural example

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

UML class diagram

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

Console.Read();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航