组合模式
使用者不必关心使用的对象,把他们当成一个整体,以相同的方式处理。
demo
package structuralpattern;
import java.util.ArrayList;
import java.util.List;
/**
* @author tx
* @version 1.0
* @date 2024/1/8 10:19
* @description:
* 组合模式
* 树就是一个典型的使用组合模式的例子
*/
public class CompositePattern {
public static void main(String[] args) {
//构造职位树
Member boss = new Member("陈老大","boss");
Member dept1 = new Member("王部长","财务部");
Member dept2 = new Member("刘部长","财务部");
Member dept3 = new Member("张三","生产部");
Member dept4 = new Member("李四","生产部");
Node<Member> memberBoss = new Composite<>(boss);
Node<Member> memberMyDept;
// 财务部 挂到 boss 下
memberBoss.add(dept1);
memberBoss.add(dept2);
memberMyDept = memberBoss.getAll().get(0);
// 生产部 挂到 王部长下
memberMyDept.add(dept3);
memberMyDept.add(dept4);
System.out.println(memberBoss);
}
}
class Member{
private String name;
private String level;
public Member(String name, String level) {
this.name = name;
this.level = level;
}
@Override
public String toString() {
return "{" +
"\"name\":\"" + name + '\"' +
", \"level\":\"" + level + '\"' +
'}';
}
}
/**
* 定义树的基本结构,
* 包含添加字节的方法
* 获取子节点方法
* 删除子节点方法。
*/
interface Node<T>{
/**
* 添加子节点
* @param one
*/
void add(T one);
/**
* 获取所有子节点
* @return 所有子节点
*/
List<Node<T>> getAll();
/**
* 删除所有子节点
* @return 所有子节点
*/
List<Node<T>> removeAll();
}
class Composite<T> implements Node<T>{
private List<Node<T>> nodes = new ArrayList<>();
private T thisOne;
public Composite(T thisOne) {
this.thisOne = thisOne;
}
/**
* 添加子节点
*
* @param one
*/
@Override
public void add(T one) {
nodes.add(new Composite<>(one));
}
/**
* 获取所有子节点
*
* @return 所有子节点
*/
@Override
public List<Node<T>> getAll() {
return nodes;
}
/**
* 删除所有子节点
*
* @return 所有子节点
*/
@Override
public List<Node<T>> removeAll() {
List<Node<T>> ans = nodes;
nodes = new ArrayList<>();
return ans;
}
@Override
public String toString() {
return "{" +
"\"thisOne\":" + thisOne +
",\"nodes\":" + nodes +
'}';
}
}
demo 格式化打印