把一组结构相似的对象,当做一个单一的对象。为减少数据类型,简化项目结构
用于嵌套的树型数据结构,将其抽象成统一的数据结构
事例
需求:水果订单支持送货,需要建立一个收货地址的数据结构
数据结构如图

抽象类及实现类代码:
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;
}
}
总结
适用场景
分为部分和整体的场景,能抽象成树型的数据结构
优点
- 简化了系统结构
- 调用简单
- 节点可以自由增减
缺点
- 只适用于树型结构
这篇博客探讨了如何通过抽象类和实现类将树型数据结构简化,以处理如水果订单收货地址等复杂数据。介绍了两种实现方式:一种是通过TreeNode类判断列表为空来标识叶子节点,另一种是创建LeafNode类直接表示最后一级。这种方式减少了数据类型,简化了项目结构,使节点操作更加灵活。

被折叠的 条评论
为什么被折叠?



