把一组结构相似的对象,当做一个单一的对象。为减少数据类型,简化项目结构
用于嵌套的树型数据结构,将其抽象成统一的数据结构
事例
需求:水果订单支持送货,需要建立一个收货地址的数据结构
数据结构如图
抽象类及实现类代码:
public abstract class Node {
private String addressName;
private List<Node> mList;
public Node(String addressName) {
this.addressName = addressName;
// 对List初始化
mList = new ArrayList<>();
}
public void addNode(Node node) {
mList.add(node);
}
public void removeNode(Node node) {
mList.remove(node);
}
public List<Node> getNodes() {
return mList;
}
// 判断是否是叶子节点
public abstract boolean isLeaf();
}
判断Node是最后一级的方式有两种:
- 新建实现类TreeNode,当List为空则表示最后一级
- 再新建实现类LeafNode,当Node为LeafNode时表示最后一级,当Node为TreeNode时表示不是最后一级
// 方式一
public class TreeNode extends Node {
public TreeNode(String addressName) {
super(addressName);
}
public boolean isLeaf() {
return getNodes().size() == 0;
}
}
// 方式二
public class LeafNode extends Node {
public LeafNode(String addressName) {
super(addressName);
}
@Override
public boolean isLeaf() {
return true;
}
}
总结
适用场景
分为部分和整体的场景,能抽象成树型的数据结构
优点
- 简化了系统结构
- 调用简单
- 节点可以自由增减
缺点
- 只适用于树型结构