从战神金刚看组合模式

    相信不少人小时候都喜欢倒腾机器人或者四驱车之类的玩具。在我们这一辈的儿时,所有对此类玩具的印象来自于电视机。其实代表机器人的名作有很多,最出名的的是变形金刚这部经典。其实除了变形金刚还有一句台词相信能唤起我们儿时的回忆,那就是:我来组成头部!

    没错,如果你跟我生活在相同的年代,你就会认出这是战神金刚第一部的台词!下面这副图是否能唤起你的回忆:)
   
从战神金刚看组合模式
 
 
    今天要讲的主题就和上面的图片息息相关。我想先来介绍一下战神金刚的构造。^^在正常状态下,战神金刚是拆分成了15个不同的小机器人存在的。这15个小机器人有可以在天空飞行的飞机机器人,也有在水路航行的轮船机器人,更有在陆地上开的小车机器人。总之是,海陆空齐全。
    在执行一些特殊任务的时候,小机器人可以部分组成一个机器人合体,如下图所示,下图组成了三个中型的机器人合体,分别是海陆空三队。

从战神金刚看组合模式
 
   如果碰到一些非常BT的boss,中型机器人合体搞不定的时候,战神金刚的表演时间就到了。没错!15个小机器会全体组合成战神金刚,进入表演时刻,神挡杀神。如下图
从战神金刚看组合模式
从战神金刚看组合模式
 
    介绍了这么多,是该进入主题的时候了。那么,我们如何用面向对象的方式来描述战神金刚呢。
    如果不使用任何设计模式,按照我的思维逻辑,结构大概会是下图这个样子
    从战神金刚看组合模式
从战神金刚看组合模式
 
    使用组合模式后,结构如下图所示
    从战神金刚看组合模式
从战神金刚看组合模式
 
    从上图看出使用组合模式的最大不同就是抽象了机器人合体这个class。并且把装入机器人和弹出机器人方法剥离到这个class中
    这样如果以后有新的合体类型,比如混合战队,直接继承机器人合体即可,非常利于扩展。
 
    另外,还有一个额外的好处,机器人合体和小机器人都属于机器人,这样的话,对于使用者来说,会非常方便。
    关于如何用代码实现组合模式,网上有很多文章,使了用各种语言,不管是C++,C#,Java还是动态语言来说明和讲解。都讲的很多,这里就不再重复。
    

    最后来总结一下组合模式的优点:

    1、组合模式定义了组合(合体)的概念,将组合所需要的相关方法单独抽象,利于扩展。

    2、将组合(合体)与个体同等对待,会非常便于使用者使用。

      版权声明:本文为博主原创文章,未经博主允许不得转载。

相关推荐