zoukankan      html  css  js  c++  java
  • 设计模式

    如果你是一名建筑工人, 现在要建一栋十几层的楼房, 你会按照什么样的一个顺序去建造呢?

    正常来说, 肯定是先打地基, 然后在此基础上, 建一层, 建第二层 ...... , 就现在中国的科技来说, 还没有说, 可以先建顶层, 再打地基, 在建倒数第二层, 这样一种随心所欲的建造方法来实现吧.

    说白了, 建造者模式适合那种复杂结构, 相互之间有一定影响, 可以合并成一个整体的情景, 其中的新建过程, 可能是有一定顺序的, 就像工人建高楼大厦一样.

    一、建造者模式

    /// <summary>
    /// 机器人建造类
    /// 分的比较粗狂, 别在意, 不是重点
    /// </summary>
    abstract public class RobotBuilder
    {
        abstract public void BuildHead();
    
        abstract public void BuildBody();
    
        abstract public void BuildHand();
    
        abstract public void BuildFoot();
    }

    建造抽象类, 是一种规范, 规定整个建造过程中, 需要建造哪些部分.

    public class RobotA : RobotBuilder
    {
    
        public override void BuildHead()
        {
            Console.WriteLine("RobotA's head finished !");
        }
    
        public override void BuildBody()
        {
            Console.WriteLine("RobotA's body finished !");
        }
    
        public override void BuildHand()
        {
            Console.WriteLine("RobotA's hand finished !");
        }
    
        public override void BuildFoot()
        {
            Console.WriteLine("RobotA's foot finished !");
        }
    }

    具体实现, 领导既然发话了, 下面的人, 就开始落实具体细节了.

    public class Director
    {
        public static void Build(RobotBuilder builder)
        {
            builder.BuildFoot();
            Console.WriteLine("拼装双腿双脚");
    
            builder.BuildBody();
            Console.WriteLine("拼装身体, 立在地上");
    
            builder.BuildHand();
            Console.WriteLine("拼装双手");
    
            builder.BuildHead();
            Console.WriteLine("安上头颅, 启动机器人! 建造拼装完成");
        }
    }

    有时候, 为了简化, 会将Builder,Director省去, 具体需要部分以及最后的Director的Build也放在一起. 自己指导, 自己动手. 

    这不是个好例子, 不过应该能明白整个建造过程, 以及建造模式的思想了.

    参考:

    设计模式

    C#设计模式(8)

  • 相关阅读:
    Ng-model undefined in the controller
    使用nvm进行node多版本管理
    AngularJS内置指令
    angularjs ng-switch
    Interpreting NotifyCollectionChangedEventArgs zz
    XAML控件不可访问,它具有一定的保护级别
    WPF RadioButton的绑定
    WPF中的ObservableCollection数据绑定
    C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?zz
    python 获取mac地址zz
  • 原文地址:https://www.cnblogs.com/elvinle/p/6164329.html
Copyright © 2011-2022 走看看