创建型模式之二---Builder

1、结构图

 

Builder结构图

 

2、代码

/***********************************************************************************
 * 意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
 * 适用性:
 * 1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
 * 2、当构造过程必须允许被构造的对象有不同的表示时。
 * 协作:
 * 1、客户创建Director对象,并用它所想要的Builder对象进行配置;
 * 2、一旦产品部件被生成,导向器(Director)就会通知生成器(Builder);
 * 3、生成器处理导向器的请求,并将部件添加到该产品中;
 * 4、客户从生成器中检索产品。
 * 作者:董怀信
 * 时间:2009-05-26
 ***********************************************************************************/

using System;

namespace DesignPattern.CreationalPattern
{
 
    /// <summary>
    /// 为创建一个Product对象的各个部分指定抽象接口;
    /// </summary>
    public abstract class Builder
    {
        protected string[] m_Object = new string[3];
        public abstract void BuildPartA();

        public abstract void BuildPartB();

        public abstract void BuildPartC();

        public virtual string[] GetResult()
        {
            return new string[0];
        }
    }

    /// <summary>
    /// 实现Builder的接口以构造和装配该产品的各个部分;
    /// 定义并明确他所创建的表示;
    /// 提供一个检索产品的接口。
    /// </summary>
    public class ConcreteBuilder : Builder
    {
        public override void BuildPartA()
        {
            m_Object[0] = "ConcreteBuilder:BuildPartA;";
        }

        public override void BuildPartB()
        {
            m_Object[1] = "ConcreteBuilder:BuildPartB;";
        }
        public override void BuildPartC()
        {
            m_Object[2] = "ConcreteBuilder:BuildPartC;";
        }

        public override string[] GetResult()
        {
            return m_Object;
        }
    }

    /// <summary>
    /// 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程;
    /// 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
    /// </summary>
    public class Director
    {
        public void Construct(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
            builder.BuildPartC();
        }
    }


    /// <summary>
    /// 测试代码
    /// </summary>
    public class Client
    {
        public void Test()
        {
            Director d = new Director();
            Builder builder = new ConcreteBuilder();
            d.Construct(builder);
            string[] result = builder.GetResult();
            foreach (string item in result)
            {
                Console.WriteLine(item);
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalsonTung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值