建造者模式

意图

适用于那些内部结构比较复杂的产品对象.
构成---参与者:
       Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。 
       ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。不同的 ConcreteBuilder可以更换顺序参数,取得不同的结果.
       Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。 
       Product:产品角色。一个具体的产品对象。
    abstract class 生产者//抽象
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract 产品 GetResult();

    }

 
下面是具体的建造者
    class 生产者1:生产者
    {
        private 产品 _product = null;

        public 生产者1(产品 product)
        {
            _product = product; //在构造函数传入要生产的产品
        }

        public override void BuildPartA()
        {
            _product.Add("A"); //A工序
        }

        public override void BuildPartB()
        {
            _product.Add("B");//B工序
        }

        public override 产品 GetResult()
        {
            return _product;//返回产品
        }
    }
下面是指挥者
    class 设计者
    {
        public void Builder(生产者  product)
        {//指挥生产者生产的具体步骤
            product.BuildPartA();
            product.BuildPartB();
        }
    }
下面是产品
    class 产品
    {
        private List<string> cc = new List<string>();

        public void Add(string str) //产品组装中
        {
            cc.Add(str);
        }

        public string  Show() //就是完整的产品了
        {
            string str = "";

            foreach (string dd in cc )
            {
            str+=    dd+"\r\n";
            }
            return str;
        }
    }

//下面是直接调用
            生产者 product = new 生产者2(new 产品());//生产者生产
            设计者 builder = new 设计者();
            builder.Builder(product);//设计者指挥生产
            产品 cp = product.GetResult(); //然后在生产者那里取回生产好的产品
            MessageBox.Show(cp.Show());//将产品显示来出

 
//源码 ‘建造者模式1’进行了优化,去掉了 ‘设计者’,在调用界面链式调用
            AbstractBuilder builder = new ConcreteBuilder(new 产品())
                .BuildPartScan()
                .BuildPartTest()
                .BuildPartSave();

            var pro = builder.Build();//返回加载好的产品类

            if (!pro.Test()) //调用
            {
                MessageBox.Show("NG");
            }
            MessageBox.Show("OK");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值