Java结构型模式中的组合模式详解
非凡的小笨鱼 人气:0一.介绍
组合模式(Composite Pattern)属于结构型模式。组合模式又叫作部分整体模式,它是一种将对象组合成树状层次结构的模式,用来表示整体-部分的关系,使用户对单个对象和组合对象具有一致的访问性。组合模式有透明方式和安全方式两种实现方式
二.UML类图
1.透明方式
- 抽象节点中定义了规范,客户端无需区别叶子节点和树枝节点,使用方便
- 叶子节点本来无add、remove、getChild方法,但是因为抽象中定义了规范,所以必须实现它们,会带来一些安全性问题
2.安全方式
- 客户端需要区别叶子节点和树枝节点,使用不方便
- 叶子节点无add、remove、getChild方法,不存在安全性问题
三.具体代码
业务代码
//抽象节点 public abstract class Component { abstract void add(Component component); abstract void remove(Component component); abstract Component getChild(int i); abstract void operation(); } //叶子节点 class Leaf extends Component{ private String name; public Leaf(String name) { this.name = name; } @Override void add(Component component) {} @Override void remove(Component component) {} @Override Component getChild(int i) { return null; } @Override void operation() { System.out.print(name); } } //树枝节点 class Composite extends Component{ private ArrayList<Component> children = new ArrayList<>(); @Override void add(Component component) { children.add(component); } @Override void remove(Component component) { children.remove(component); } @Override Component getChild(int i) { return children.get(i); } @Override void operation() { children.forEach(Component::operation); } }
客户端
public class Client { public static void main(String[] args) { Component level1 = new Composite(); level1.add(new Leaf("1")); level1.add(new Leaf("2")); Component level2 = new Composite(); level2.add(new Leaf("2.1")); level1.add(level2); level1.operation(); } }
四.使用场景
- 需要表示一个对象整体与部分的层次结构
- 要求对用户隐藏组合对象与单个对象的不同,用户可以使用统一的接口操作组合结构中的所有对象
- 组织机构树
- 文件/文件夹
五.优点
- 简化了客户端代码(客户端一致地处理单个对象和组合对象)
- 符合开闭原则(新增具体实现类不需要更改源代码)
加载全部内容