系列文章:定义 将对象组成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有唯一性。 结构 示例 Component:组件中的对象声明接口。在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子组件。 abstract class Component { protected String name; public Component(String name) { this.name = name; } public abstract void add(Component c); public abstract void remove(Component c); public abstract void display(int depth); } Leaf:表示叶子节点对象。叶子节点没有子节点。 class Leaf extends Component { public Leaf(String name) { super(name); } @Override public void add(Component c) { System.out.println("Can not add to a leaf"); } @Override public void remove(Component c) { System.out.println("Can not remove from a leaf"); } @Override public void display() { // print super.name } } Composite:定义枝节点行为,用来存储子组件。在 Component 接口中实现与子组件相关的操作。 class Composite extends Component { private List<Component> children = new ArrayList<Component>(); public Composite(String name) { super(name); } @Override public void add(Component c) { children.add(c); } @Override public void remove(Component c) { children.remove(c); } @Override public void display(int depth) { for (Component c : children) { c.display(); } } } Client:通过 Component 接口操作结构中的对象 public class CompositePattern { public static void main(String[] args) { Composite root = new Composite("root"); root.add(new Leaf("Leaf A"); Composite comX = new Composite("comX"); comX.add(new Leaf("Leaf Xa"); comX.add(new Leaf("Leaf Xb"); root.add(comX); root.display(); } } 样例 abstract class MessageUnit { protected String json; public MessageUnit(String json) { this.json = json; } public abstract void add(MessageUnit unit); public abstract String toJSONString(); } 定义子组件和枝组件 class MessageHeader extends MessageUnit { public MessageHeader(String json) { super(json); } @Override public void add(MessageUnit unit) { // Nothing to do } @Override public String toJSONString() { return json; } } class MessageBody extends MessageUnit { public MessageBody(String json) { super(json); } @Override public void add(MessageUnit unit) { // Nothing to do } @Override public String toJSONString() { return json; } } class Message extends MessageUnit { private List<MessageUnit> messageUnits = new ArrayList<MessageUnit>(); public Message(String json) { super(json); } @Override public void add(MessageUnit unit) { this.messageUnits.add(unit); } @Override public String toJSONString() { List<Object> messages = new ArrayList<Object>(); for (MessageUnit messageUnit : messageUnits) { String json = messageUnit.toJSONString(); Object obj = JSONObject.parseObject(json, MessageProtocol.class); messages.add(obj) } return JSON.toJSONString(messages); } } Client public class Client { public static void main(Stirng[] args) { Message message = new Message("{...}"); message.add(new MessageHeader("{...}")); message.add(new MessageBody("{...}")); String json = body.toJSONString(); System.out.println("json :" json); } } 转载请并标注: “本文转载自 linkedkeeper.com ” ©著作权归作者所有 |