相信不少人小时候都喜欢倒腾机器人或者四驱车之类的玩具。在我们这一辈的儿时,所有对此类玩具的印象来自于电视机。其实代表机器人的名作有很多,最出名的的是变形金刚这部经典。其实除了变形金刚还有一句台词相信能唤起我们儿时的回忆,那就是:我来组成头部!
没错,如果你跟我生活在相同的年代,你就会认出这是战神金刚第一部的台词!下面这副图是否能唤起你的回忆:)
今天要讲的主题就和上面的图片息息相关。我想先来介绍一下战神金刚的构造。^^在正常状态下,战神金刚是拆分成了15个不同的小机器人存在的。这15个小机器人有可以在天空飞行的飞机机器人,也有在水路航行的轮船机器人,更有在陆地上开的小车机器人。总之是,海陆空齐全。
在执行一些特殊任务的时候,小机器人可以
部分组成一个
机器人合体,如下图所示,下图组成了三个中型的
机器人合体,分别是海陆空三队。
如果碰到一些非常BT的boss,中型
机器人合体搞不定的时候,战神金刚的表演时间就到了。没错!15个小机器会全体组合成
战神金刚,进入表演时刻,神挡杀神。如下图
介绍了这么多,是该进入主题的时候了。那么,我们如何用面向对象的方式来描述战神金刚呢。
如果不使用任何设计模式,按照我的思维逻辑,结构大概会是下图这个样子
使用组合模式后,结构如下图所示
从上图看出使用组合模式的最大不同就是
抽象了机器人合体这个class。并且把装入机器人和弹出机器人方法剥离到这个class中
。
这样如果以后有新的合体类型,比如混合战队,直接继承机器人合体即可,非常利于扩展。
另外,还有一个额外的好处,机器人合体和小机器人都属于机器人,这样的话,对于使用者来说,会非常方便。
关于如何用代码实现组合模式,网上有很多文章,使了用各种语言,不管是C++,C#,Java还是动态语言来说明和讲解。都讲的很多,这里就不再重复。
最后来总结一下组合模式的优点:
1、组合模式定义了组合(合体)的概念,将组合所需要的相关方法单独抽象,利于扩展。
2、将组合(合体)与个体同等对待,会非常便于使用者使用。
版权声明:本文为博主原创文章,未经博主允许不得转载。