设计模式 - Builder模式
2016-05-20 17:31
357 查看
1 目的
2 代码
3 总结
然而我感觉这个设计模式并没有什么卵用
当我们要创建的对象很复杂的时候(通常是 由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分 离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中 可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。
2 代码
using UnityEngine; using System.Collections; namespace Builder{ //产品的总体实例 public class Product{ public string ProductInstance{get;set;} public void showProductInstance(){ Debug.Log("Product Instance is " + ProductInstance); } public void buildProduct(string productInfo){ this.ProductInstance = productInfo; } } //产品的部分实例(产品的部分实例结合起来组成产品的总体实例) public class ProductPart{ public string ProductPartInstance{get;set;} public ProductPart(string productPartInfo){ this.ProductPartInstance = productPartInfo; } } //创造者基类 public abstract class Builder{ public abstract ProductPart buildProductPartA(string buildPara); public abstract ProductPart buildProductPartB(string buildPara); public abstract ProductPart buildProductPartC(string buildPara); public abstract Product getProduct(string productPartAInfo, string productPartBInfo, string productPartCInfo); } //实际创造者,会创造出产品总体的三部分,然后结合成商品总体 public class ConcreteBuilder : Builder{ public override ProductPart buildProductPartA(string buildPara){ ProductPart partA = new ProductPart(buildPara); return partA; } public override ProductPart buildProductPartB(string buildPara){ ProductPart partB = new ProductPart(buildPara); return partB; } public override ProductPart buildProductPartC(string buildPara){ ProductPart partC = new ProductPart(buildPara); return partC; } public override Product getProduct(string productPartAInfo, string productPartBInfo, string productPartCInfo){ Product product = new Product(); product.ProductInstance += new ProductPart(productPartAInfo).ProductPartInstance; product.ProductInstance += new ProductPart(productPartBInfo).ProductPartInstance; product.ProductInstance += new ProductPart(productPartCInfo).ProductPartInstance; return product; } } //导演控制创造者生产产品 public class Director{ private Builder builder; public Director(Builder builder){ this.builder = builder; } public Product construct(string productPartAInfo, string productPartBInfo, string productPartCInfo){ if(null != builder){ return builder.getProduct(productPartAInfo, productPartBInfo, productPartCInfo); } return null; } } public class BuilderDemo : MonoBehaviour { //创造者模式 void Start(){ Director director = new Director(new ConcreteBuilder()); Product product = director.construct("partA", "partB", "partC"); product.showProductInstance(); } } }
3 总结
GoF 在《设计模式》一书中给出的关于 Builder 模式的意图是非常容易理解、间接的: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(在示例 代码中可以通过传入不同的参数实现这一点)。 Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对 象,它们的区别是:Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获 得不同的结果对象,一般来说 Builder 模式中对象不是直接返回的。而在 AbstractFactory 模 式中对象是直接返回的,AbstractFactory 模式强调的是为创建多个相互依赖的对象提供一个 同一的接口。
然而我感觉这个设计模式并没有什么卵用
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用