结构型模式-组合
来源:互联网 发布:c类网络的子网掩码 编辑:程序博客网 时间:2024/04/28 06:23
结构图
模式说明
类设计
模式说明
- 无类级扩展点。扩展方法在抽象接口Component中。
- Component提供Composite和Leaf的抽象接口声明和共有方法。Leaf是Component的特殊形式,Composite是Component的一般树状结构描述。
- 客户端需要知道具体使用哪个Component具体实现类。
- 将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象的使用具有一致性。
/** * @param args * -root * ---Leaf A * ---Leaf B * ---Composite X * -----Leaf XA * -----Leaf XB * -----Composite XY * -------Leaf XYA * -------Leaf XYB * ---Leaf C */public static void main(String[] args) {Component root = new Composite("root");root.add(new Leaf("Leaf A"));root.add(new Leaf("Leaf B"));Component comp = new Composite("Composite X");comp.add(new Leaf("Leaf XA"));comp.add(new Leaf("Leaf XB"));root.add(comp);Component comp2 = new Composite("Composite XY");comp2.add(new Leaf("Leaf XYA"));comp2.add(new Leaf("Leaf XYB"));comp.add(comp2);root.add(new Leaf("Leaf C"));Component leaf = new Leaf("Leaf D");root.add(leaf);root.remove(leaf);root.display(1);}
类设计
public abstract class Component {private String name;protected Component(String name) {this.name = name;}public final String getName() {return this.name;}public abstract void add(Component component);public abstract void remove(Component component);public abstract void display(int depth);}public class Leaf extends Component {protected Leaf(String name) {super(name);}@Overridepublic void add(Component component) {throw new RuntimeException("cannot add at leaf level.");}@Overridepublic void remove(Component component) {throw new RuntimeException("cannot remove at leaf level.");}@Overridepublic void display(int depth) {char[] chars = new char[depth];Arrays.fill(chars, '-');System.out.println(new String(chars) + getName());}}public class Composite extends Component {private List<Component> children = new ArrayList<Component>();protected Composite(String name) {super(name);}@Overridepublic void add(Component component) {children.add(component);}@Overridepublic void remove(Component component) {children.remove(component);}@Overridepublic void display(int depth) {char[] chars = new char[depth];Arrays.fill(chars, '-');System.out.println(new String(chars) + getName());for (Component component : children) {component.display(depth + 2);}}}
0 0
- 结构型-组合模式
- 结构型模式-组合
- 结构型--组合模式
- 组合模式(结构型)
- 结构型模式-组合模式
- 结构型模式--组合模式
- 结构型模式-组合模式
- Composite组合(结构型模式)
- 【结构型模式】composite(组合)
- 关于组合模式(结构型)
- 组合模式(结构型)
- 6-结构型-组合模式
- 结构型模式-组合(composite)
- 结构型之组合模式
- 结构型-组合模式(composite)
- 设计模式 - 结构型模式 - 组合模式
- 设计模式-结构型模式-组合
- Composite 组合模式(结构型模式)
- iphone 与 ipad 分辨率
- 我看过的,印象深刻的网络小说
- 网站为什么易被入侵?
- leetcode 日经贴,python code -Surrounded Regions
- Linux中find命令使用介绍
- 结构型模式-组合
- “这世界是个好地方,值得为它奋斗。”不过我只同意后半句。 --- 海明威
- (5174)HDU
- 数组-10. 求整数序列中出现次数最多的数(15)
- 字符乱码问题的解析
- xcode6 控件Tag获取不到的问题 解决
- 还好你没有接受我
- EL表达式学习笔记
- 检查数据库是否存在