设计模式 - Builder模式

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

然而我感觉这个设计模式并没有什么卵用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值