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);
            }
    
  • 相关阅读:
    Java实现三人年龄
    从session中获取当前用户的工具类
    全局Session-GlobalSession
    Request获取Session的两种方式
    跨域访问sessionid不一致问题
    获得HttpServletRequest 和HttpSession对象
    eclipse pom.xml 报错org.apache.maven.plugin.war.WarMojo的解决办法
    idea与eclipse项目相互导入的过程
    静态工具类中使用注解注入service实例
    解决静态utils里面注入mapper对象
  • 原文地址:https://www.cnblogs.com/amywechat/p/4924784.html
Copyright © 2011-2022 走看看