常说的设计模式是23种设计模式,分为3大类:
- 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
- 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
- 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。
上次咱们说了“享元模式”。今天咱们聊一聊结构型模式中的“组合模式”。
结构型模式重点在于结构的变化。
“组合模式”主要是“组合”的结构设定。
经常使用的案例是树的组成。
我们把树分为由“树枝”和“树叶”组成,为什么这么分呢?其中的组成部分是有区别的,“树枝”的下一级有可能是“树枝”也有可能是“树叶”,如果是“树叶”就没有下一级了。所以先建立一个安全抽象构件接口,主要是行为operation为显示结果行为。
如果“树枝”此行为就是要循环它的所有子对象,一个“树枝”下可能有多个“树枝”或“树叶”。
如果是“树叶”就直接显示,并且没有任何的子对象。
在应用中: 建立“树枝”对象,可以添加子对象。
建立“树叶”对象,不可以添加子对象。
下面就是讲故事的环节:
儿时听过这样一个故事“从前有座山,山上有座庙,庙里有个老道,讲故事,讲的故事就是,从前有座山,山上有座庙,庙里有个老道,讲故事......”就此下去,直到我睡着了。从来没有听完的故事。
今天,我们就来分解一下故事的组成部分,有山,有庙,有老道,有故事,故事里有山有庙有老道有故事。就此组合下去是无限的,但是我们设置一个故事开始,和故事的结束,其余的都可以无限的组合。
安全接口,分故事主题构件和结束故事构件
接口中,定义了多个方法,其中operation为结果方法
在故事主体中,添加其他的组成部分
故事结束的构建,最终结果显示结束
下面建立各个组成部分
最后组成测试程序:
结果:
永远也讲不完的故事