zoukankan      html  css  js  c++  java
  • 建造者模式 -- 大话设计模式

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

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

    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);
            }
    
  • 相关阅读:
    Unix Vi 命令详解
    硬盘安装 solaris
    Oracle 10g RAC OCR 和 VotingDisk 的备份与恢复
    Unix vmstat 命令
    Unix Vi 命令详解
    How do I rename a data file
    Oracle 购买价格 和 服务费 计算方式
    Solaris 更改系统语言
    硬盘安装 solaris
    How do I rename a data file
  • 原文地址:https://www.cnblogs.com/amywechat/p/4924784.html
Copyright © 2011-2022 走看看