代码改变世界

建造者模式

2005-05-14 07:48  稻草人  阅读(531)  评论(0)    收藏  举报
摘自吕振宇blogs:

                                                                                                                                           2005年5月14日  7:45:18


//
 Builder pattern -- Structural example  

using System;
using System.Collections;

// "Director"
class Director
{
  
// Methods
  public void Construct( Builder builder )
  
{
    builder.BuildPartA();
    builder.BuildPartB();
  }

}


// "Builder"
abstract class Builder
{
  
// Methods
  abstract public void BuildPartA();
  
abstract public void BuildPartB();
  
abstract public Product GetResult();
}


// "ConcreteBuilder1"
class ConcreteBuilder1 : Builder
{
  
// Fields
  private Product product;

  
// Methods
  override public void BuildPartA()
  
{
    product 
= new Product();
    product.Add( 
"PartA" );
  }


  
override public void BuildPartB()
  
{
    product.Add( 
"PartB" );
  }


  
override public Product GetResult()
  
{
    
return product;
  }

}


// "ConcreteBuilder2"
class ConcreteBuilder2 : Builder
{
  
// Fields
  private Product product;

  
// Methods
  override public void BuildPartA()
  
{
    product 
= new Product();
    product.Add( 
"PartX" );
  }


  
override public void BuildPartB()
  
{
    product.Add( 
"PartY" );
  }


  
override public Product GetResult()
  
{
    
return product;
  }

}


// "Product"
class Product
{
  
// Fields
  ArrayList parts = new ArrayList();
 
  
// Methods
  public void Add( string part )
  
{
    parts.Add( part );
  }


  
public void Show()
  
{
    Console.WriteLine( 
" Product Parts -------" );
    
foreachstring part in parts )
      Console.WriteLine( part );
  }

}


/// <summary>
/// Client test
/// </summary>

public class Client
{
  
public static void Main( string[] args )
  
{
    
// Create director and builders
    Director director = new Director( );

    Builder b1 
= new ConcreteBuilder1();
    Builder b2 
= new ConcreteBuilder2();

    
// Construct two products
    director.Construct( b1 );
    Product p1 
= b1.GetResult();
    p1.Show();

    director.Construct( b2 );
    Product p2 
= b2.GetResult();
    p2.Show();
  }

}

看过了上面的那些东西以后,思路就比上一次清晰多了,可能还是因为看书不够,数据结构这一块还有很多要学,不管怎么样,我会加油的,不过我还是有很多问题.

 在学习了那么多模式之后,不知道它们是如何应用在产品的开发上... ... 难道所有的产品都会有模式?...

我想所谓的模式也只是一条路,不能一条路走到黑,要能通会变...

这些个模式每次看都会有新的东西出来...总能学到一些东西,程序这东西有的时候就有这种魅力,让人感到新奇;