设计模式8——组合模式
来源:互联网 发布:mac怎么选中多个文件 编辑:程序博客网 时间:2024/06/07 17:07
1.生活实例
组合模式首先想到的就是树形结构,比如我们常用的文件结构,请看Windows的文件结构:
无论是文件或者是文件夹,常用操作都是一致的,比如:复制、粘贴、剪切、删除、所占空间大小。我们并没有刻意的去分他是文件夹还是文件。
我们可以把文件夹看成是组合对象,把每一个文件看成是单个对象。组合模式模糊了这两个概念,他使得客户端能够用简单一致的操作来操作两个不同的东西。
2.定义解析
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象的使用具有一致性。
Client:客户端。
Component:定义组合对象的接口。
Leaf:组合对象中的叶子,实现Component接口。
Composite:组合对象中的节点,组合所有叶子,实现Component接口,并且可以删除和增加叶子。
3.代码分析
Component
public interface Component {public void show();public void isChild(int pFatherLevel);}
Composite
public class Composite implements Component {private String mName;private int mLevel;private ArrayList<Component> mList = new ArrayList<Component>();public Composite(String pName) {mName = pName;mLevel = 0;}public void add(Component pComponent) {pComponent.isChild(mLevel);mList.add(pComponent);}public void remove(Component pComponent) {mList.remove(pComponent);}@Overridepublic void show() {showLevel();for (Component component : mList) {component.show();}}@Overridepublic void isChild(int pFatherLevel) {mLevel = pFatherLevel + 1;}private void showLevel() {for (int i = 0; i < mLevel; i++) {System.out.print("-");}System.out.println(mName);}}
Leaf
public class Leaf implements Component {private String mName;private int mLevel;public Leaf(String pName) {mName = pName;mLevel = 0;}@Overridepublic void show() {showLevel();}@Overridepublic void isChild(int pFatherLevel) {mLevel = pFatherLevel + 1;}private void showLevel() {for (int i = 0; i < mLevel; i++) {System.out.print("-");}System.out.println(mName);}}
Client
public class CompositeTest {// 类似二叉树这样的结构public static void main(String[] args) {Composite composite1 = new Composite("节点1");Composite composite2 = new Composite("节点2");Leaf leaf1 = new Leaf("叶子1");Leaf leaf2 = new Leaf("叶子2");Leaf leaf3 = new Leaf("叶子3");Leaf leaf4 = new Leaf("叶子4");Leaf leaf5 = new Leaf("叶子5");composite1.add(leaf1);composite1.add(leaf2);composite1.add(composite2);composite2.add(leaf3);composite2.add(leaf4);composite2.add(leaf5);composite1.show();}}
打印结果:
节点1
-叶子1
-叶子2
-节点2
--叶子3
--叶子4
--叶子5
4.总结
很久没写博客,捡起来。学如逆水行舟,不进则退。
0 0
- 设计模式8——组合模式
- 设计模式—组合模式
- 设计模式—组合模式
- 设计模式——组合设计模式
- 设计模式组合——命令模式组合工厂模式
- 每日设计模式——组合模式
- 设计模式——组合模式
- Java设计模式——组合模式
- java设计模式——组合模式
- 设计模式——组合模式
- 设计模式——组合模式
- 设计模式——组合模式
- 设计模式——组合模式
- Python设计模式——组合模式
- C++设计模式——组合模式
- 设计模式——组合模式
- C++设计模式——组合模式
- 设计模式——组合模式
- 工作日志4-9
- 结构体
- 【OpenStack】Nova中的rebuild和evacuate(HA)
- CPU Utilization, CPU Load Average, Context Switch Rate
- 预习报告3
- 设计模式8——组合模式
- 当前主要的开源图片加载引擎
- openfire 3.9.3 集群配置(Linux)(Mysql远程连接)
- struct sockaddr_nl 结构体 由来、含义以及使用——获取Linux路由表
- WebView一
- MFC ListControl 删除选定的多行
- iOS对象属性详解
- top命令的Load average 含义及性能参考基值
- Mac Adobe CS6 完美破解激活(免替换文件/可更新)详细图文教程