您的位置:首页 > 产品设计 > UI/UE

设计模式 - Builder模式

2016-05-20 17:31 357 查看
1 目的

当我们要创建的对象很复杂的时候(通常是 由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分 离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中 可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。


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 模式强调的是为创建多个相互依赖的对象提供一个 同一的接口。


然而我感觉这个设计模式并没有什么卵用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式