【设计模式】—— 组合模式Composite

  前言:【模式总览】——————————by xingoohtml

  模式意图

  使对象组合成树形的结构。使用户对单个对象和组合对象的使用具备一致性。java

  

  应用场景

  1 表示对象的 部分-总体 层次结构安全

  2 忽略组合对象与单个对象的不一样,统一的使用组合结构中的全部对象。this

  模式结构

  【安全的组合模式】spa

  这种组合模式,叶子节点,也就是单个对象不具备对象的控制功能。仅仅有简单的业务操做。code

 1 package com.xingoo.composite.safe;  2 
 3 import java.util.ArrayList;  4 import java.util.List;  5 
 6 interface Component{  7  Composite getCmposite();  8     void sampleComposite();  9 } 10 
11 class Leaf implements Component{ 12 
13     public Composite getCmposite() { 14         return null; 15  } 16 
17     public void sampleComposite() { 18         System.out.println("Leaf operation"); 19  } 20     
21 } 22 
23 class Composite implements Component{ 24 
25     private List<Component> list = new ArrayList(); 26     
27     public void add(Component component){ 28  list.add(component); 29  } 30     
31     public void remove(Component component){ 32  list.remove(component); 33  } 34     
35     public Composite getCmposite() { 36         return this; 37  } 38 
39     public void sampleComposite() { 40         System.out.println("Composite operation"); 41         for(Component com : list){ 42  com.sampleComposite(); 43  } 44  } 45     
46 } 47 public class Client { 48     public static void main(String[] args) { 49         Component leaf1 = new Leaf(); 50         Component leaf2 = new Leaf(); 51         Component composite = new Composite(); 52  composite.getCmposite().add(leaf1); 53  composite.getCmposite().add(leaf2); 54  composite.getCmposite().sampleComposite(); 55  } 56 }

  执行结果component

Composite operation Leaf operation Leaf operation

 

  【透明的组合模式】htm

  这种组合模式,叶子节点与组合对象具备相同的方法,外表看来毫无差别。不过叶子节点的处理方法默认为空。忽略叶子节点,与组合对象的差别性。对象

 1 package com.xingoo.composite.transparent;  2 
 3 import java.util.ArrayList;  4 import java.util.List;  5 
 6 interface Component{  7     public void SampleOperation();  8     public void add(Component component);  9     public void remove(Component component); 10     public Component getComponent(); 11 } 12 
13 class Leaf implements Component{ 14     public void SampleOperation() { 15         System.out.println("leaf operation!"); 16  } 17 
18     public void add(Component component) { 19         
20  } 21 
22     public void remove(Component component) { 23         
24  } 25     
26     public Component getComponent(){ 27         return this; 28  } 29 } 30 
31 class Composite implements Component{ 32     
33     private List<Component> list = new ArrayList(); 34     
35     public void SampleOperation() { 36         System.out.println("composite operation!"); 37         for(Component com : list){ 38  com.getComponent().SampleOperation(); 39  } 40  } 41 
42     public void add(Component component) { 43  list.add(component); 44  } 45 
46     public void remove(Component component) { 47  list.remove(component); 48  } 49     
50     public Component getComponent(){ 51         return this; 52  } 53 } 54 public class Client { 55     public static void main(String[] args) { 56         Component leaf1 = new Leaf(); 57         Component leaf2 = new Leaf(); 58         Component leaf3 = new Leaf(); 59         Component composite1 = new Composite(); 60         Component composite = new Composite(); 61         
62  composite1.add(leaf3); 63         
64  composite.getComponent().add(leaf1); 65  composite.getComponent().add(leaf2); 66  composite.getComponent().add(composite1); 67         
68  composite.getComponent().SampleOperation(); 69  } 70 }

  本例中的结构层次blog

  执行结果

composite operation! leaf operation! leaf operation! composite operation! leaf operation!
相关文章
相关标签/搜索