composite组合模式 -- java模式
- 组合模式1
- 组合模式2
组合模式1
Component.java
package com.mark.pattern.composite; public interface Component { public void doSomething(); }
Composite.java
package com.mark.pattern.composite; import java.util.ArrayList; import java.util.List; /** * 组合模式 * */ public class Composite implements Component{ private List<Component> list =new ArrayList<Component>(); public void add(Component component) { list.add(component); } public void remove(Component component) { list.remove(component); } public List<Component> getAll(){ return this.list; } @Override public void doSomething() { for(Component component : list) { component.doSomething(); } } }
Leaf.java
package com.mark.pattern.composite; public class Leaf implements Component{ @Override public void doSomething() { System.out.println("执行方法"); } }
Client.java
package com.mark.pattern.composite; public class Client { public static void main(String[] args) { Component leaf1 = new Leaf(); Component leaf2 = new Leaf(); Composite comp1 = new Composite(); comp1.add(leaf1); comp1.add(leaf2); Component leaf3 = new Leaf(); Component leaf4 = new Leaf(); Composite comp2 =new Composite(); comp2.add(comp1); comp2.add(leaf3); comp2.add(leaf4); comp2.doSomething(); } }
组合模式2
Component.java
package com.mark.pattern.composite2; import java.util.List; public interface Component { public void doSomething(); public void add(Component component); public void remove(Component component); public List<Component> getAll(); }
Composite.java
package com.mark.pattern.composite2; import java.util.ArrayList; import java.util.List; public class Composite implements Component { private List<Component> list = new ArrayList<Component>(); @Override public void add(Component component) { list.add(component); } @Override public void doSomething() { for (Component component : list) { component.doSomething(); } } @Override public List<Component> getAll() { return this.list; } @Override public void remove(Component component) { list.remove(component); } }
Leaf.java
package com.mark.pattern.composite2; import java.util.List; public class Leaf implements Component { @Override public void add(Component component) { } @Override public void doSomething() { System.out.println("执行方法"); } @Override public List<Component> getAll() { return null; } @Override public void remove(Component component) { } }
Client.java
package com.mark.pattern.composite2; public class Client { public static void main(String[] args) { Component leaf1 = new Leaf(); Component leaf2 = new Leaf(); Component comp1 = new Composite(); comp1.add(leaf1); comp1.add(leaf2); Component leaf3 = new Leaf(); Component leaf4 = new Leaf(); Component comp2 =new Composite(); comp2.add(comp1); comp2.add(leaf3); comp2.add(leaf4); comp2.doSomething(); } }