浅谈设计模式之建造者模式
2016-05-23 12:16
127 查看
建造者模式(Prototype):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需要指定需要创建的类型就可以得到产品,而不需要知道具体的构建过程。
建造者模式属于创建型的设计模式,生活中的很多例子都可以引用这种设计模式,比如我们去吃饭的时候点了一份套餐(产品),那么收银员(导演)就会通知厨师(建造者)按照这份套餐的各个部分组合做完之后让服务员端给用户。
UML图如下:
建造者模式主要适用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象的内部构建通常面对着复杂的变化。所以当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时,或者当构造过程必须允许被构造的对象有不同的表示时就应该考虑使用建造者模式了。
建造者模式的好处在于建造代码和表示代码分离了,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
从图中可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。一般来说,如果产品的建造不复杂,那么请用工厂模式;如果产品的建造很复杂,那么请用建造者模式。
参考书籍:《大话设计模式》
建造者模式属于创建型的设计模式,生活中的很多例子都可以引用这种设计模式,比如我们去吃饭的时候点了一份套餐(产品),那么收银员(导演)就会通知厨师(建造者)按照这份套餐的各个部分组合做完之后让服务员端给用户。
UML图如下:
//需要建造的产品类 class Product { //部件列表 List<String> mPartList=new List<String>(); public void Add(String part) { mPartList.add(part); } public void Show() { foreach (string p in mPartList) Print(p); } } //抽象建造者 abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product GetProduct(); } //具体建造者类 class ConcreteBuilder : Builder { Product mProduct=new Product(); public void BuildPartA() { mProduct.Add("ConcreteBuilderA.buildPartA"); } public void BuildPartB() { mProduct.Add("ConcreteBuilderA.buildPartB"); } public Product GetProduct() { return mProduct; } } //指挥者类 class Director { //用来指挥建造过程 public void Construct(Builder builder){ builder.BuildPartA(); builder.BuildPartB(); } } //测试 static void Main((string[] args) { //创建过程 Builder builder = new ConcreteBuilder(); Director director = Director(); director.Construct(builder); //创建完成后的产品 Product p = builder.GetResult(); p.Show(); Console.Read(); }
建造者模式主要适用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象的内部构建通常面对着复杂的变化。所以当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时,或者当构造过程必须允许被构造的对象有不同的表示时就应该考虑使用建造者模式了。
建造者模式的好处在于建造代码和表示代码分离了,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
从图中可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。一般来说,如果产品的建造不复杂,那么请用工厂模式;如果产品的建造很复杂,那么请用建造者模式。
参考书籍:《大话设计模式》
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用