[转]C#设计模式(8)-Builder Pattern
2013-06-29 15:18
651 查看
一、 建造者(Builder)模式
建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。对象性质的建造
有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。
有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。
这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程就是组合零件的过程。由于组合零件的过程很复杂,因此,这些"零件"的组合过程往往被"外部化"到一个称作建造者的对象里,建造者返还给客户端的是一个全部零件都建造完毕的产品对象。
命名的考虑
之所以使用"建造者"而没有用"生成器"就是因为用零件生产产品,"建造"更为合适,"创建"或"生成"不太恰当。
二、 Builder模式的结构:
// Builder pattern -- Structural exampleusing System;
using System.Collections;
// "Director"
class Director
// "Builder"
abstract class Builder
// "ConcreteBuilder1"
class ConcreteBuilder1 : Builder
// "ConcreteBuilder2"
class ConcreteBuilder2 : Builder
// "Product"
class Product
public class Client
// Builder pattern -- Real World example
using System;
using System.Collections;
// "Director"
class Shop
// "Builder"
abstract class VehicleBuilder
// "ConcreteBuilder1"
class MotorCycleBuilder : VehicleBuilder
// "ConcreteBuilder2"
class CarBuilder : VehicleBuilder
// "ConcreteBuilder3"
class ScooterBuilder : VehicleBuilder
// "Product"
class Vehicle
public class BuilderApp
// "Director"
class Director
public class Builder
public class Client
{
private static Builder builder;
public static void Main()
{
builder = new Builder();
builder.Construct();
Product product = builder.GetResult();
}
}
C#中的StringBuilder就是这样一个例子。
七、 在什么情况下使用建造者模式
以下情况应当使用建造者模式:1、 需要生成的产品对象有复杂的内部结构。
2、 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
3、 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。
使用建造者模式主要有以下效果:
1、 建造模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
2、 每一个Builder都相对独立,而与其它的Builder无关。
3、 模式所建造的最终产品更易于控制。
参考文献:
阎宏,《Java与模式》,电子工业出版社
[美]James W. Cooper,《C#设计模式》,电子工业出版社
[美]Alan Shalloway James R. Trott,《Design Patterns Explained》,中国电力出版社
[美]Robert C. Martin,《敏捷软件开发-原则、模式与实践》,清华大学出版社
[美]Don Box, Chris Sells,《.NET本质论 第1卷:公共语言运行库》,中国电力出版社
文章来源:http://www.cnblogs.com/zhenyulu/articles/37378.html
相关文章推荐
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式(8)-Builder Pattern
- C#设计模式——生成器模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式——生成器模式(Builder Pattern)
- C#设计模式(5)——建造者模式(Builder Pattern)
- C#设计模式之建造者模式(Builder Pattern)
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
- C#设计模式——生成器模式(Builder Pattern)
- C#设计模式(五)建造者模式(Builder Pattern)
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
- 如何让孩子爱上设计模式 —— 3.建造者模式(Builder Pattern)
- C#设计模式(5)-Factory Method Pattern
- C#设计模式(16)——迭代器模式(Iterator Pattern)
- c++设计模式之四:Builder Pattern
- Java设计模式之Builder Pattern