【设计模式-07】Composite组合模式

简要说明

一、代码实现

  • 定义抽象节点类 Node**,定义抽象方法** public abstract void print();
  • 定义叶子节点类 LeafNode**,继承Node节点,实现** **print()**抽象方法,叶子节点没有子节点
  • 定义子节点类 BranchNode**,继承Node节点,实现** **print()**抽象方法,子节点既可以有子节点,也又可以有叶子节点
  • 定义一个树状目录结构,使用递归打印树状目录结构
复制代码
import java.util.ArrayList;
import java.util.List;

/**
* @description: composite组合模式
* @author: flygo
* @time: 2022/7/20 14:05
*/
public class CompositeMain {
    
    public static void main(String[] args) {
        BranchNode root = new BranchNode("root");
        
        BranchNode chapter1 = new BranchNode("chapter1");
        BranchNode chapter2 = new BranchNode("chapter2");
        
        Node r1 = new LeafNode("r1");
        Node c11 = new LeafNode("c11");
        Node c12 = new LeafNode("c12");
        
        BranchNode b21 = new BranchNode("section21");
        Node c211 = new LeafNode("c211");
        Node c212 = new LeafNode("c212");
        
        root.add(chapter1).add(chapter2).add(r1);
        chapter1.add(c11).add(c12);
        chapter2.add(b21);
        b21.add(c211).add(c212);
        
        tree(root, 0);
    }
    
    private static void tree(Node node, int depth) {
        for (int i = 0; i < depth; i++) {
            System.out.print("--");
        }
        node.print();
        
        if (node instanceof BranchNode) {
            for (Node n : ((BranchNode) node).nodes) {
                tree(n, depth + 1);
            }
        }
    }
}

abstract class Node {
    public abstract void print();
}

/**
* @description: 叶子节点-不能有子节点
* @author: flygo
* @time: 2022/7/20 14:10
*/
class LeafNode extends Node {
    String content;
    
    public LeafNode(String content) {
        this.content = content;
    }
    
    @Override
    public void print() {
        System.out.println(content);
    }
}

/**
* @description: 子节点-可以有子节点和叶子节点
* @author: flygo
* @time: 2022/7/20 14:10
*/
class BranchNode extends Node {
    
    // 子节点可以有子节点和叶子节点
    List<Node> nodes = new ArrayList<>();
    
    String name;
    
    public BranchNode(String name) {
        this.name = name;
    }
    
    @Override
    public void print() {
        System.out.println(name);
    }
    
    public BranchNode add(Node node) {
        this.nodes.add(node);
        return this;
    }
}

二、源码地址

https://github.com/jxaufang168/Design-Patternshttps://github.com/jxaufang168/Design-Patterns

相关推荐
vker2 小时前
第 1 天:单例模式(Singleton Pattern)—— 创建型模式
java·设计模式
晨米酱21 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机1 天前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 天前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤1 天前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机2 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机2 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴2 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript