基于C#的设计模式学习之建造者模式

建造者模式是创建型模式,提供了一种创建对象的最佳方式。用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂的对象(把内部的建造过程和细节隐藏起来)。实现建造和表示分离,将复杂的产品建造步骤分解到不同的方法中,让创建过程更加的清晰。具体建造类之间是相互独立的,这有利于系统的扩展,增加新的具体建造者无需修改原有类库的代码,符合开闭的原则。

示例如下:

 



namespace Designmode.Builder
{
    /// <summary>
    /// 抽象建造者
    /// </summary>
    public abstract class Builder
    {
        /// <summary>
        /// 建造A部分
        /// </summary>
        public abstract Builder buildPartA(string content);
        /// <summary>
        /// 建造B部分
        /// </summary>
        public abstract Builder buildPartB(string content);
        /// <summary>
        /// 建造C部分
        /// </summary>
        public abstract Builder buildPartC(string content);
        /// <summary>
        /// 返回建造结果
        /// </summary>
        public abstract Product GetReturn();
    }
}



namespace Designmode.Builder
{
    /// <summary>
    /// 指挥构建工程,工程如何构建由它决定
    /// </summary>
    public class Director
    {
        /// <summary>
        /// 指挥建造
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public Product Bulid(Builder builder)
        {
            builder.buildPartA("打地基");
            builder.buildPartB("钢筋工程");
            builder.buildPartC("铺电缆");
            return builder.GetReturn();
        }
    }
}



namespace Designmode.Builder
{
    /// <summary>
    /// 产品
    /// </summary>
    public class Product
    {
        /// <summary>
        /// 产品的A部分
        /// </summary>
        private string partA;
        /// <summary>
        /// 产品的B部分
        /// </summary>
        private string partB;
        /// <summary>
        /// 产品的C部分
        /// </summary>
        private string partC;
        /// <summary>
        /// 设置A部分
        /// </summary>
        /// <param name="partA">A内容</param>
        public void SetPartA(string partA)
        {
            this.partA = partA;
        }
        /// <summary>
        /// 设置B部分
        /// </summary>
        /// <param name="partB">B内容</param>
        public void SetPartB(string partB)
        {
            this.partB = partB;
        }
        /// <summary>
        /// 设置C部分
        /// </summary>
        /// <param name="partC">C内容</param>
        public void SetPartC(string partC)
        {
            this.partC = partC;
        }
        /// <summary>
        /// Tostring 重写
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return $"{this.partA} {this.partB} {this.partC}";
        }
    }
}

namespace Designmode.Builder
{
    /// <summary>
    /// 具体建造者(建造房子工人)
    /// </summary>
    public class Worker : Builder
    {
        /// <summary>
        /// 由工人建造的产品
        /// </summary>
        private Product _product = null;
        /// <summary>
        /// 工人的构造函数
        /// </summary>
        public Worker()
        {
            _product = new Product();
        }
        /// <summary>
        /// 工人建造的A部分
        /// </summary>
        public override Builder buildPartA(string content)
        {
            this._product.SetPartA(content);
            return this;
        }
        /// <summary>
        /// 工人建造的B部分
        /// </summary>
        public override Builder buildPartB(string content)
        {
            this._product.SetPartB(content);
            return this;
        }
        /// <summary>
        /// 工人建造的C部分
        /// </summary>
        public override Builder buildPartC(string content)
        {
            this._product.SetPartC(content);
            return this;
        }
        /// <summary>
        /// 返回工人建造的结果
        /// </summary>
        /// <returns>工人建造的产品</returns>
        public override Product GetReturn()
        {
            return this._product;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值