Abstract Factory pattern -- Structural example
2024-07-21 02:27:42
供稿:网友
 
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();
  }
}