构建者模式

最近重读设计模式,理解更上一层楼。

为以便日后翻阅之需特坚持写博客,记录技术点滴,本设计模式系列源码均参考 http://c.biancheng.net/view/1317.html java语言版本的23种设计模式,同时方便没有java基础的同学参阅故翻译成C#系列。

java系列对设计模式的应用说明,模式的总结均有详细说明,此系列文章仅仅作翻阅之用,如需要详细理解请参阅上述链接。

 

  /// <summary>
    /// 构建者模式
    /// 一般应用于业务复杂,通过实现多个业务子类的不同实现实现多态
    /// 通过构建者类实现对子类实现的管理 实现不同构建者得到不同业务子类
    /// 实现构建者多态后,通过项目管理者类来管理构建者的构建行为规范
    ///最终得到特定的构建者所有特有的业务子类来实现上层业务类的一层层构建
    /// </summary>
    class ParlourDecorator
    {
        public static void Main(string[] args)
        {
            MeDecorator decorator1 = new ConcreteDecorator1(); //得到具体构建着,得到构建部件不同的实现
            ProjectManager manager = new ProjectManager(decorator1); //通过项目管理方式管理构建者的施工过程
            Parlour parlour1 = manager.Decorate(); //得到具体实现类
            parlour1.Show();

            MeDecorator decorator2 = new ConcreteDecorator2(); //得到具体构建着,得到构建部件不同的实现
            manager = new ProjectManager(decorator2); //通过项目管理方式管理构建者的施工过程
            Parlour parlour2 = manager.Decorate(); //得到具体实现类
            parlour2.Show();
        }
    }
    interface Wall
    {

    }
    class ConcreteWall1 : Wall
    {
    }
    class ConcreteWall2 : Wall
    {
    }
    interface TV
    {

    }
    class ConcreteTV1 : TV
    {
    }
    class ConcreteTV2 : TV
    {
    }
    interface Sofa
    {

    }
    class ConcreteSofa1 : Sofa
    {

    }
    class ConcreteSofa2 : Sofa
    {

    }
    class Parlour
    {
        private Wall wall;//
        private TV tv; //电视
        private Sofa sofa;//沙发
        public void SetWall(Wall wall)
        {
            //逻辑
            this.wall = wall;
        }
        public void SetTV(TV tv)
        {
            //逻辑
            this.tv = tv;
        }
        public void SetSofa(Sofa sofa)
        {
            //逻辑
            this.sofa = sofa;
        }

        public void Show()
        {
            Console.WriteLine(wall);
            Console.WriteLine(tv);
            Console.WriteLine(sofa);
        }
    }
    /// <summary>
    /// 抽象构建者
    /// </summary>
    abstract class MeDecorator
    {
        protected Parlour parlour = new Parlour();
        public abstract void BuilderWall();
        public abstract void BuilderTV();
        public abstract void BuilderSofa();

        public Parlour GetParlour()
        {
            return parlour;
        }
    }
    class ConcreteDecorator1 : MeDecorator
    {
        public override void BuilderSofa()
        {
            parlour.SetSofa(new ConcreteSofa1());
        }
        public override void BuilderTV()
        {
            parlour.SetTV(new ConcreteTV1());
        }
        public override void BuilderWall()
        {
            parlour.SetWall(new ConcreteWall1());
        }
    }
    class ConcreteDecorator2 : MeDecorator
    {
        public override void BuilderSofa()
        {
            parlour.SetSofa(new ConcreteSofa2());
        }
        public override void BuilderTV()
        {
            parlour.SetTV(new ConcreteTV2());
        }
        public override void BuilderWall()
        {
            parlour.SetWall(new ConcreteWall2());
        }
    }
    //指挥者:项目经理
    class ProjectManager
    {
        private MeDecorator builder;
        public ProjectManager(MeDecorator builder)
        {
            this.builder = builder;
        }
        //产品构建与组装方法
        public Parlour Decorate()
        {
            builder.BuilderWall();
            builder.BuilderTV();
            builder.BuilderSofa();

            return builder.GetParlour();
        }
    }

 

posted on 2019-08-03 12:52  迎着风追赶  阅读(145)  评论(0)    收藏  举报

导航