概念
组合模式是把对象堆起来形成集合的一种方式。它组织对象形成集合,结合迭代器模式,可以对客户隐藏具体对象实现。不至于暴露集合内部信息。形式上经
常将组合你模式用于对象的树形结构表示。
实现
- 背景
村子里面养了 鸡,鸭,本地鸭,外地鸭,猪。这些家畜都会跑。现在要将他们集合起来,进行统一管理。每天数数,防止丢失。
抽象
我们可以用组合模式来进行管理这些家畜。
首先家畜的集合进行抽象树形结构。
第一层:普通家畜
第二层:普通家禽下有 猪,禽类
第三层:禽类 下面有 鸡,鸭
第四层:鸭子下面有 本地鸭,外地鸭。类图
- 对象关联图:
部分代码:
AnimalType:
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
1 | package com.littlehui.design.composite; |
Client:
1 | package com.littlehui.design.composite; |
- 迭代器组合部分
- 解析
实际上,上面的代码分两个部分理解:
1:家畜动物们的关联组合
2:对动物们遍历的迭代组合(代码略)
组合模式经常会应用到迭代模式,这里也都写上了。
场景
HtmlPaser包,解析Html页面。就是典型的组合模式。
总结
组合模式关注的重点是对对象的结合方式。结合后暴露统一的接口管理。正如上所表达的,动物们集合后通过组合迭代器的方式统一暴露了一个遍历的方法口。
屏蔽了内部实现,调用端只需调用迭代方法就可以实现遍历管理了。有了迭代组合还可以个性化的筛选,等等趋向业务逻辑的实现。