设计模式之建造者模式

来源:互联网 发布:足彩自动推荐软件 编辑:程序博客网 时间:2024/05/28 01:35

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(可以规范建造流程,防止出现错误)

 

例如:生产一种产品,该产品包含三个零件,有多种不同的生产方法,使用建造者模式实现该产品的生产。

 

(1)创建产品类

/// <summary>
    /// 产品
    /// </summary>
    public class Product
    {
        //部件A
        public string PartA { get; set; }
        //部件B
        public string PartB { get; set; }
        //部件C
        public string PartC { get; set; }
    }

(2)创建抽象构建者类,以规范生产过程,防止出现错误

 /// <summary>
    /// 构建着抽象类
    /// </summary>
    public abstract class Builder
    {
        protected Product _pro;

        public Builder(Product pro)
        {
            _pro = pro;
        }
        //以下是生产产品的工作流程
        public abstract void BuildA();
        public abstract void BuildB();
        public abstract void BuildC();
    }

(3)创建具体的创建者类,以实现不同的生产方式

/// <summary>
    /// 构架模式A
    /// </summary>
    public class BuilderA:Builder
    {
        public BuilderA(Product pro)
            : base(pro)
        {

        }

        public override void BuildA()
        {
            _pro.PartA = "精良的A部件";
        }
        public override void BuildB()
        {
            _pro.PartB = "精良的B部件";
        }
        public override void BuildC()
        {
            _pro.PartC = "精良的C部件";
        }
    }

/// <summary>
    /// 构造模式B
    /// </summary>
    public class BuilderB:Builder
    {
        public BuilderB(Product pro)
            : base(pro)
        {
        }
        public override void BuildA()
        {
            _pro.PartA = "粗糙的A部件";
        }
        public override void BuildB()
        {
            _pro.PartB = "粗糙的B部件";
        }
        public override void BuildC()
        {
            _pro.PartC = "粗糙的C部件";
        }
    }

 

(4)创建指挥者类,已实现工作流程的规范,客户端无需知道具体的生产过程,实现封装

/// <summary>
    /// 指挥生产零件的类
    /// </summary>
    public class Director
    {
        private Builder _builder;

        public Director(Builder builder)
        {
            this._builder = builder;
        }

        public void CreateProduct()
        {
            _builder.BuildA();
            _builder.BuildB();
            _builder.BuildC();
           
        }
    }

(5)客户端生产零件

 Product pro = new Product();
 BuilderA builderA = new BuilderA(pro);
 Director director = new Director(builderA);
 director.CreateProduct();

Console.WriteLine("生产出来的部件,{0},{1},{2}",pro.PartA,pro.PartB,pro.PartC);

 

 

 

 

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国际联程航班第一程延误怎么办 大麦网演唱会的票售罄了怎么办 国内转机航班第一班延误了怎么办 联程机票下一程航班被取消怎么办 联程机票第一班航班取消怎么办 联程机票第二段航班被取消怎么办 联程航班第一程延误行李怎么办 联程航班未赶上第二程行李怎么办 高铁晚点赶不上下一趟动车怎么办? 动车晚点赶不上下一趟车怎么办 动车晚点导致没赶上下一趟怎么办 浙大三位一体选考分数报错了怎么办 报到证上时间到期了还没报到怎么办 不停的打嗝已经超过24小时怎么办 面对不给下属做主的领导怎么办 法院说退款受伤人去不了证明怎么办 e栈快递柜没收到短信怎么办 京东快递放门卫丢了怎么办 丰巢快递柜收不到取件码怎么办 丰巢快递柜手机号码填错了怎么办 e栈手机号换了取不出来怎么办 买高铁票起点一样终点不一样怎么办 定火车票把名字写错一个字怎么办 火车票坐完车票丢了报销怎么办 客户交给我的钱被骗了怎么办 要证明网络来源的可靠性该怎么办 魅族手机高德地图信号弱怎么办 t恤的印花粘粘的怎么办 从包图网下载的模板素材丢失怎么办 大屏导航的语音功能怎么办用 手机导航不走地图上面走时怎么办 行车撞到步行人死亡师机逃离怎么办 小天才平板电脑不显示了怎么办 高德地图导航不显示车速怎么办 桥梁梁片强度达不到设计要求怎么办 新车交车检验表客户没签字怎么办 中铁快运职工拒绝提货要怎么办 奇瑞a3暖风水箱爆了怎么办 别人挖鱼塘占了我的山土怎么办 自己的鱼塘让别人强行占住了怎么办 公路扩路占地占了鱼塘怎么办?