Design Pattern 09-java 组合模式(Composite Pattern)
2017年3月14日大约 2 分钟
组合模式
组合模式(Composite Pattern)使得用户对单个对象和组合对象的使用具有唯一性。
将对象组合成树形结构以表示【部分-整体】的层次结构。
实际案例
类信息概览:
类名 | 说明 |
---|---|
Main.java | 方法的总入口 |
Component.java | 组件 |
Composite.java | 组合类 |
Leaf.java | 叶子 |
定义
- Component.java
package com.ryo.design.pattern.note.composite;
/**
*
* @author bbhou
* @date 2017/8/11
*/
public abstract class Component {
private String name;
public Component(String name) {
this.name = name;
}
public String getName() {
return name;
}
/**
* add one compoent
* @param component
*/
public abstract void add(Component component);
/**
* remove one compoent
* @param component
*/
public abstract void remove(Component component);
/**
* display the component info;
* @param depth
*/
public abstract void display(int depth);
}
- Composite.java
package com.ryo.design.pattern.note.composite;
import java.util.LinkedList;
import java.util.List;
/**
*
* @author bbhou
* @date 2017/8/11
*/
public class Composite extends Component {
/**
* 用于存放子节点
*/
private List children = new LinkedList<>();
/**
* 定义枝节点行为,用来存储子部件,在 Component 接口中实现与子部件相关的操作。
* @param name
*/
public Composite(String name) {
super(name);
}
@Override
public void add(Component component) {
this.children.add(component);
}
@Override
public void remove(Component component) {
this.children.remove(component);
}
@Override
public void display(int depth) {
//1.itself
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i
*
* Created: 2018/5/16 下午8:11
* Project: design-pattern
*
* @author houbinbin
* @version 1.0
* @since JDK 1.7
*/
public class Main {
public static void main(String[] args) {
Composite root = new Composite("root");
root.add(new Leaf("Leaf A"));
root.add(new Leaf("Leaf B"));
Composite compX = new Composite("Composite X");
compX.add(new Leaf("Leaf XA"));
compX.add(new Leaf("Leaf XB"));
root.add(compX);
Composite compXY = new Composite("Composite XY");
compXY.add(new Leaf("Leaf XYA"));
compXY.add(new Leaf("Leaf XYB"));
compX.add(compXY);
root.display(1);
}
}
- 测试结果
- root
--- Leaf A
--- Leaf B
--- Composite X
----- Leaf XA
----- Leaf XB
----- Composite XY
------- Leaf XYA
------- Leaf XYB
实现方式
UML & Code
UML
UML 图示如下
Code
代码地址
系列导航
贡献者
binbin.hou