赞
踩
组合模式是一种结构型模式,它可以将对象组合成树状结构,用来区分部分和整体的层次机构,又叫部分整体模式
- 组件:组合中所有对象的通用接口,可以是抽象类或者接口,声明管理子组件的方法,通常包括新增、删除、获取等方法
- 叶子节点:表示组合叶子节点对象,它没有子节点,实现组件的方法,但不包括子组件
- 复合节点:表示组件中的符合对象,实现组件方法,它可以包含子组件,也可是叶子节点
- 客户端:通过组合接口与组合结构交互,不区分叶子节点和复合节点,可以一致的对待整体与部分
将书作为叶子节点,将目录作为符合节点
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(); }); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。