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


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

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

    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);
            }
    
  • 相关阅读:
    Linux下C程序插入执行shell脚本
    #ifdef预编译相关用法
    LAMP开发之环境搭建(2014.12.7在ubuntu下)
    Qt在VS2010的安装与配置
    vs2010配备boost编程环境
    Ubuntu虚拟机与Window、Arm的通信
    大小端测试程序
    Ubuntu安装google Gtest
    设计模式之单例模式
    设计模式之原型模式
  • 原文地址:https://www.cnblogs.com/amywechat/p/4924784.html
Copyright © 2020-2023  润新知