版权声明:不自见故明;不自是故彰;不自伐故有功;不自矜故长; https://blog.csdn.net/LightUpHeaven/article/details/84727232
WHAT?
既然说了是组合,那么肯定参与组合的不止一个,是多个。但是不是任意对象组合起来都可以成为组合模式呢?
其实不然。
这多个对象,它们彼此之间必须有“整体/部分”的关系,并且你想用一致的方式对待这些兑现时,你就需要组合模式。
那么所谓的“整体/部分”关系,指的是什么呢?
HeadFirst里举例使用的用户界面,一些顶层组件(像是Frame或Panel)包含着其他组件(像菜单,文字面板,滚动条,按钮),你的GUI包含了若干部分,但是当你显示它的时候,你认为它是一个整体。你告诉顶层的组件显示,然后就放手不管,由顶层组件负责显示所有相关的部分。
这里的Menu中包含一个MenuComponent的列表,其中既可以放Menu,也可以放MenuItem。它们都继承了MenuComponent抽象类。
WHY?
很简单,如果我们打开任何一个软件,参考它的菜单的话,就会发现,其实点击了上层的菜单之后,下层菜单也都显示出来了,所以可以通过这个树状的结构,用最上面的根节点控制叶子节点的显示和动作。
HOW?
因为继承了相同的接口,所以可以层层传递,直接调用子类的函数