二十三种设计模式(十一)组合模式

组合模式:又叫做部分整体模式。它是将一些具有从属关系的对象组合在一起形成树型结构,该结构中只有两种类型的对象,分别是容器节点(Composite)和叶子节点(leaf)。

容器节点是指树型结构中存在子节点的节点,它的子节点可以是容器节点,也可以是叶子节点。

叶子节点是指树型结构中不存在子节点的节点,它位于树型结构的末端。

其它系统对整个树型结构的所有对象的使用具有一致性。无论是容器节点还是叶子节点。

/**

* 节点,外部系统使用时都使用Node进行处理,实现了叶子节点和容器节点的一致性

* */

public interface Node {

//获取节点名称

public void getName();

}

/**

* 容器节点

* */

public class CompositeNode implements Node{

public String name;

public CompositeNode(String name){

this.name = name;

}

@Override

public void getName() {

System.out.println(name);

}

//存放容器节点的子节点,可以是容器节点,也可以是叶子节点,保证了节点的一致性

public ArrayList<Node> nodes = new ArrayList<>();

//添加子节点到树下

public void addNode(Node node){

nodes.add(node);

}

}

/**

* 叶子节点

* */

public class LeafNode implements Node{

String name;

public LeafNode(String name){

this.name = name;

}

@Override

public void getName() {

System.out.println(name);

}

}

public class Main {

public static void main(String[] args) {

Node root =getNodes();

getAllNodes(root,0);

}

//遍历

public static void getAllNodes(Node node,int dept){

for(int i =0;i<dept;i++){

System.out.print("--");

}

node.getName();

if(node instanceof CompositeNode){

for(Node n:((CompositeNode) node).nodes){

getAllNodes(n,dept+1);

}

}

}

//组装树

public static Node getNodes(){

CompositeNode root = new CompositeNode("Boss");

CompositeNode manager1 = new CompositeNode("Manager1");

root.addNode(manager1);

CompositeNode manager2 = new CompositeNode("Manager2");

root.addNode(manager2);

CompositeNode manager3 = new CompositeNode("Manager3");

root.addNode(manager3);

CompositeNode groupLeader1 = new CompositeNode("groupLeader1");

manager1.addNode(groupLeader1);

CompositeNode groupLeader2 = new CompositeNode("groupLeader2");

manager1.addNode(groupLeader2);

CompositeNode groupLeader3 = new CompositeNode("groupLeader3");

manager2.addNode(groupLeader3);

CompositeNode groupLeader4 = new CompositeNode("groupLeader4");

manager2.addNode(groupLeader4);

CompositeNode groupLeader5 = new CompositeNode("groupLeader5");

manager3.addNode(groupLeader5);

CompositeNode groupLeader6 = new CompositeNode("groupLeader6");

manager3.addNode(groupLeader6);

LeafNode NormalEmployee1 = new LeafNode("NormalEmployee1");

groupLeader1.addNode(NormalEmployee1);

LeafNode NormalEmployee2 = new LeafNode("NormalEmployee2");

groupLeader1.addNode(NormalEmployee2);

LeafNode NormalEmployee3 = new LeafNode("NormalEmployee3");

groupLeader2.addNode(NormalEmployee3);

LeafNode NormalEmployee4 = new LeafNode("NormalEmployee4");

groupLeader2.addNode(NormalEmployee4);

LeafNode NormalEmployee5 = new LeafNode("NormalEmployee5");

groupLeader3.addNode(NormalEmployee5);

LeafNode NormalEmployee6 = new LeafNode("NormalEmployee6");

groupLeader3.addNode(NormalEmployee6);

return root;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值