建造者模式 -- 大话设计模式

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的建造过程可以创建不同的表示

1.建造者模式应用

  一家服装厂,经理老张,员工两名(一个师傅老王,一个徒弟小海),客户跟老张联系,要做两件衣服,老张指派老王和小海各做一件

  定义建造者抽象类和具体建造者,他们是具体干活的(对象的构建)

    /// <summary>
    /// 员工抽象类(建造者抽象类)
    /// </summary>
    public abstract class Staff
    {
        protected string _name;

        public Staff(string name)
        {
            this._name = name;
        }

        /// <summary>
        /// 具体业务
        /// </summary>
        public abstract void DoSomething();
    }

    /// <summary>
    /// 一般员工(具体建造者)
    /// </summary>
    public class GeneralStaff : Staff
    {
        public GeneralStaff(string name) : base(name) { }

        public override void DoSomething()
        {
            Console.WriteLine("{0}【一般员工】做的衣服,做工粗糙", this._name);
        }
    }

    /// <summary>
    /// 资深员工(具体建造者)
    /// </summary>
    public class SeniorStaff : Staff
    {
        public SeniorStaff(string name) : base(name) { }

        public override void DoSomething()
        {
            Console.WriteLine("{0}【资深员工】做的衣服,做工精细", this._name);
        }
    }

   定义指挥者,负责与外部对接的(表示的分离)

    /// <summary>
    /// 指挥者
    /// </summary>
    public class Director
    {
        protected string _name;

        public Director(string name)
        {
            this._name = name;
        }

        /// <summary>
        /// 指派员工干活
        /// </summary>
        public void Assign(Staff staff)
        {
            staff.DoSomething();
        }
    }

   开启场景模拟

        static void Main(string[] args)
        {
            //一家服装厂,经理老张,员工两名(一个师傅老王,一个徒弟小海)
            Director laozhang = new Director("老张");

            SeniorStaff laowang = new SeniorStaff("老王");
            GeneralStaff xiaohai = new GeneralStaff("小海");

            //客户跟老张联系,要做两件衣服,老张指派老王和小海各做一件
            laozhang.Assign(laowang);
            laozhang.Assign(xiaohai);
        }

 

posted @ 2015-10-31 08:31  荒古禁地  阅读(173)  评论(0编辑  收藏  举报