zoukankan      html  css  js  c++  java
  • 2.5 《硬啃设计模式》第7章 车手选车

    某赛车游戏,玩家可以选择不同的车,这些车其实是采用不同性能的配件组成的,如:车胎、发动机等。
    玩家选择一部车,其实就是new了一部车。
    你如何考虑“new car”的代码?

    要new这个车,可能需要先new出车的各个配件,然后将这些配件组合成car。
    某些复杂对象要new出来时,往往需要先new出它的子对象,然后组装成进父对象中,这些子对象有时候甚至组成了“树”结构。
    生成器模式就是用来解决这问题的。

    赛车游戏用生成器的解决方案:

      生成器1.png

    CAR_Builder定义了增加车组件的几个方法,还有CreateCar()方法。
    BenZ_Builder类是具体生产奔驰车的类,该类集成了CAR_Builder,并且根据需要编写了生产奔驰车的特有代码。
    同理,Ferrari_Builder是用来生产法拉利的,如果想增加更多的车品种,再增加一个类继承CAR_Builder便可。

    生成器的 类图

      生成器2.png



    直接看此图会有点难以理解,请先理解上面的例子。
    抽象类Builder的责任是建立各组件,CreateComponent()方法不一定只有一个的,可根据需要添加多个。
    建立出来的组件可能是树形结构,Component与Leaf的关系就是表示这个意思。
    各组件最终需要组合在一起,最终我们需要有一个类似CreateCar()的方法来得到这个包含各组件的父对象。


    请看下一文……
     
     
     
     
     
     
     
     
     
     
     
     

    作者:张传波

    创新工场创业课堂(敏捷课程)讲师

    软件研发管理资深顾问

    CMMI首席专家

    《火球——UML大战需求分析》作者

    《硬啃设计模式》作者

    www.umlonline.org创办人

  • 相关阅读:
    [机房测试]11.11
    题解——[AHOI2013]作业(莫队)
    [机房测试]11.7
    [机房测试]11.6
    [机房测试]11.5
    [机房测试]11.4
    [机房测试]10.29
    [机房测试]10.28
    初学SPFA
    神奇的游戏
  • 原文地址:https://www.cnblogs.com/riskyer/p/3395428.html
Copyright © 2011-2022 走看看