组合设计模式

组合设计模式

兄弟们好,今天我们来聊一下组合设计模式。没错这里面的组合就是我们经常用来代替继承的组合。

而组合设计模式强调的是:将对象组合成树形结构来表现“部分和整体”的层次结构,可以让客户端通过一种方式处理单个对象或者多个对象组合。

我们看一下它的角色组成:

  • 组合部件(Component):抽象角色,为要组合的对象提供统一的接口,客户端要调用的功能。
  • 叶子(Leaf):在组合中表示结对对象,叶子节点中不能有子节点
  • 合成部件(Composite):定义有子节点的行为,用来存储部件,实现在Component中的功能。

我们看一下它的类图实现:

我们再来看一下它的代码实现:

组合部件(Component)

abstract class Node {
    abstract void print();
}

叶子节点(Leaf)

class ConentNode extends Node {
    private String content ;
    public ConentNode(String content){ this.content = content ; }
    void print() {
        System.out.println(this.content);
    }
}

合成部件(Composite)

class MiddleNode extends Node {
    private List<Node> listNodes = new ArrayList<>();
    private String content ;
    public List<Node> getListNodes(){return listNodes;}
    public MiddleNode(String content){ this.content = content ; }
    void print() {
        System.out.println(this.content);
    }
    public MiddleNode addNode(Node node){
        this.listNodes.add(node);
        return this ;
    }
}

测试

public static void main(String[] args) {
        MiddleNode node = new MiddleNode("root");
        MiddleNode node1 = new MiddleNode("chapter1");
        MiddleNode node2 = new MiddleNode("chapter2");
        Node node1_1 = new ConentNode("content1_1");
        Node node1_2 = new ConentNode("content1_2");
        Node node1_3 = new ConentNode("content1_3");
        Node node2_1 = new ConentNode("content2_1");
        Node node2_2 = new ConentNode("content2_2");
        node.addNode(node1).addNode(node2);
        node1.addNode(node1_1).addNode(node1_2).addNode(node1_3);
        node2.addNode(node2_1).addNode(node2_2);
        printNodeContent(node,0);
    }

	//通过这个方法打印每一个节点的值,递归的方式(一个树遍历)
    static void printNodeContent(Node node,int depth){
        //为了增加层次,每一层打印一个--
        for (int i = 0; i < depth; i++) {
            System.out.print("--");
        }
        node.print();
        if(node instanceof MiddleNode){
            MiddleNode node1  = (MiddleNode)node ;
            for (Node node2 : node1.getListNodes()){
                printNodeContent(node2,depth+1);
            }
        }
    }

运行结果

root
--chapter1
----content1_1
----content1_2
----content1_3
--chapter2
----content2_1
----content2_2

好了,到这里组合设计模式就讲完了,其本质就是通过将不同的对象组合成树形的结构,让客户端可以统一通过同一个方法进行调用执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值