java23种设计模式三(连载)
2012-11-17 16:01
603 查看
三、组合模式
组合模式,也叫合成模式,树模式,它是一组对象的组合,这些对象可以是容器对象,表现为组的概念。
组合模式的意图是为了保证客户端调用单对象于组合对象的一致性。
涉及角色:
1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component
子部件。
2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除(remove)等。
适用性
以下情况下适用组合模式:
1.你想表示对象的部分-整体层次结构
2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
以下代码体现了组合模式的思想:
组合模式,也叫合成模式,树模式,它是一组对象的组合,这些对象可以是容器对象,表现为组的概念。
组合模式的意图是为了保证客户端调用单对象于组合对象的一致性。
涉及角色:
1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component
子部件。
2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除(remove)等。
适用性
以下情况下适用组合模式:
1.你想表示对象的部分-整体层次结构
2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
以下代码体现了组合模式的思想:
package tree; public abstract class Tree { /** * 添加一个树节点 * @param tree */ public abstract void add(Tree tree); /** * 批量添加树节点 * @param trees */ public abstract void add(Tree[] trees); /** * 移除一个树节点 * @param tree */ public abstract void remove(Tree tree); }
package cn.sunsharp.tbapp.util.tree; import java.util.ArrayList; import java.util.List; public class TreeNode extends Tree{ private Long id; private Long parentId; private List<Tree> children; private String text; private String state; private Boolean checked; public static class Builder{ private Long id; private Long parentId; private List<Tree> children = new ArrayList<Tree>(); private String text; private String state; private Boolean checked; public Builder id(Long id){ this.id = id; return this; } public Builder parentId(Long parentId){ this.parentId = parentId; return this; } public Builder children(List<Tree> children){ this.children = children; return this; } public Builder text(String text){ this.text = text; return this; } public Builder state(String state){ this.state = state; return this; } public Builder checked(Boolean checked){ this.checked = checked; return this; } public Tree build(){ return new TreeNode(this); } } @Override public void add(Tree tree) { children.add(tree); } @Override public void remove(Tree tree) { children.remove(tree); } @Override public String toString() { StringBuilder sb = new StringBuilder(1000); sb.append("{id:"); sb.append(id); sb.append(",text:\""); sb.append(text); sb.append("\",iconCls:"); sb.append("\"icon-ok\""); sb.append(",children:"); sb.append(children.toString()); sb.append("}"); return sb.toString(); } private TreeNode(Builder builder){ id = builder.id; parentId = builder.parentId; children = builder.children; text = builder.text; state = builder.state; checked = builder.checked; } public Long getId() { return id; } public Long getParentId() { return parentId; } public String getText() { return text; } public String getState() { return state; } public Boolean getChecked() { return checked; } public List<Tree> getChildren() { return children; } @Override public void add(Tree[] trees) { for(Tree tree:trees){ children.add(tree); } } }
public static void main(String[] args) { Tree root = new TreeNode.Builder().text("根节点").build(); Tree parent1 = new TreeNode.Builder().text("父节点1").build(); Tree parent2 = new TreeNode.Builder().text("父节点2").build(); root.add(parent1); root.add(parent2); Tree son11 = new TreeNode.Builder().text("子节点11").build(); Tree son12 = new TreeNode.Builder().text("子节点12").build(); parent1.add(son11); parent1.add(son11); System.out.println(root.toString()); }
相关文章推荐
- java23种设计模式七(连载)
- java23种设计模式八(连载)
- java23种设计模式九(连载)
- java23种设计模式十二(连载)
- java23种设计模式二(连载)
- java23种设计模式十一(连载)
- java23种设计模式五(连载)
- java23种设计模式六(连载)
- java23种设计模式十四(连载)
- java23种设计模式十三(连载)
- java23种设计模式四(连载)
- java23种设计模式十(连载)
- java23种设计模式一(连载)
- Java开发中的23种设计模式详解(转)
- Java中的23种设计模式
- Java之23种设计模式
- Java 23种设计模式之简单工厂模式
- 【结构型模式】代理模式(Proxy)之23种java设计模式
- JAVA中的23种设计模式
- java 23种设计模式教程