设计模式-组合模式Composite(结构型)

组合模式(Composite)

组合模式是一种结构型模式,它可以将对象组合成树状结构,用来区分部分和整体的层次机构,又叫部分整体模式

角色

  1. 组件:组合中所有对象的通用接口,可以是抽象类或者接口,声明管理子组件的方法,通常包括新增、删除、获取等方法
  2. 叶子节点:表示组合叶子节点对象,它没有子节点,实现组件的方法,但不包括子组件
  3. 复合节点:表示组件中的符合对象,实现组件方法,它可以包含子组件,也可是叶子节点
  4. 客户端:通过组合接口与组合结构交互,不区分叶子节点和复合节点,可以一致的对待整体与部分

案例

将书作为叶子节点,将目录作为符合节点

java 复制代码
public interface Component {
    void add(Component component);
    void remove(Component component);
    Component get();
    void plant();
}

public class Book implements Component{
    private String id;
    private String name;
    private Integer price;

    public Book(String id, String name, Integer price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    @Override
    public void add(Component component) {
        throw new RuntimeException("非目录,不支持add操作");
    }

    @Override
    public void remove(Component component) {
        throw new RuntimeException("非目录,不支持remove操作");
    }

    @Override
    public Component get() {
        return this;
    }
    
    /** 书只打印名字和价格*/
    @Override
    public void plant() {
        System.out.println("  " + name +"(" + price +")");
    }

}

public class Catalogue implements Component{
    private String id;
    private String name;
    private List<Component> items;
    private int root;

    public Catalogue(String id, String name, List<Component> items, int root) {
        this.id = id;
        this.name = name;
        this.items = items;
        this.root = root;
    }

    @Override
    public void add(Component component) {
        this.items.add(component);
    }

    @Override
    public void remove(Component component) {
        this.items.remove(component);
    }

    @Override
    public Component get() {
        return this;
    }

    /** 目录打印所有书和子目录,用root记录目录层次*/
    @Override
    public void plant() {
        System.out.println("--" + name);
        this.items.forEach(a -> {
            for (int i = 0; i < root; i++) {
                System.out.print("  ");
            }
            a.plant();
        });
    }
}
相关推荐
nnsix1 小时前
设计模式 - 模板方法模式 笔记
笔记·设计模式·模板方法模式
likerhood5 小时前
设计模式-装饰器模式(java)
java·设计模式·装饰器模式
青瓦梦滋9 小时前
C++特殊类设计(设计模式)和类型转换
c++·设计模式
geovindu10 小时前
python: Monitor Pattern
开发语言·python·设计模式·监控模式
workflower10 小时前
人工智能全球治理
大数据·人工智能·设计模式·机器人·动态规划
workflower10 小时前
AI灵活高效的智慧用能核心场景
大数据·人工智能·设计模式·机器人·动态规划
雪碧聊技术11 小时前
什么是生成器模式?一文详解
设计模式·生成器模式
geovindu12 小时前
go: Monitor Pattern
开发语言·后端·设计模式·golang·监控模式
雪度娃娃12 小时前
行为型设计模式——命令模式
c++·设计模式·命令模式
Geometry Fu12 小时前
《设计模式》2026编程作业汇总
java·c++·设计模式