Java设计模式之组合模式(Composite)实践

       组合模式定义:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
       项目中的部分、整体场景,如树形菜单结构、文件夹管理等,可以考虑使用组合模式。

以下代码演示组合模式简单的实际运用:定义一个接口Node:

package com.ldl.cn.CompositeModel;

public interface Node {

    public void add(Node node);
    public void remove(Node node);
    public Node getChild(int i);
    public void operation();
}

分别定义BranchNode、LeafNode实现Node:

package com.ldl.cn.CompositeModel;

import java.util.ArrayList;

public class BranchNode implements Node{

    private ArrayList<Node> childrenNode = new ArrayList<>();
    
    @Override
    public void add(Node node) {
        childrenNode.add(node);
    }

    @Override
    public void remove(Node node) {
        childrenNode.remove(node);
    }

    @Override
    public Node getChild(int i) {
        return childrenNode.get(i);
    }

    @Override
    public void operation() {
        for (Node node : childrenNode) {
            node.operation();
        }
    }
}
package com.ldl.cn.CompositeModel;

public class LeafNode implements Node{

    private String name;
    
    public LeafNode(String name) {
        super();
        this.name = name;
    }

    @Override
    public void add(Node node) {
    }

    @Override
    public void remove(Node node) {
    }

    @Override
    public Node getChild(int i) {
        return null;
    }

    @Override
    public void operation() {
        System.out.println("访问:"+name);
    }
}

编写测试类:

package com.ldl.cn.CompositeModel;

public class TestCompositePattern {

    public static void main(String[] args) {
        
        Node node1 =new BranchNode(); 
        Node node2 =new BranchNode(); 
        Node leafNode1=new LeafNode("叶子节点1"); 
        Node leafNode2=new LeafNode("叶子节点2"); 
        Node leafNode3=new LeafNode("叶子节点3");          
        node1.add(leafNode1); 
        node1.add(node2);
        
        node2.add(leafNode2); 
        node2.add(leafNode3);          
        node1.operation(); 
        System.out.println("-------------");
        node2.operation();
    }
}

运行结果:
访问:叶子节点1
访问:叶子节点2
访问:叶子节点3
-------------
访问:叶子节点2
访问:叶子节点3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值