【java设计模式】【结构模式Structural Pattern】合成模式Composite Pattern

  1 package com.tn.pattern;
  2 
  3 import java.util.Vector;
  4 
  5 public class Client {
  6     public static void main(String[] args) {
  7         Component china=new Composite("中国");
  8         
  9         Component jiangsu=new Composite("江苏");
 10         Component anhui=new Composite("安徽");
 11         
 12         Component nanjing=new Leaf("南京");
 13         Component suzhou=new Leaf("苏州");
 14         
 15         Component hefei=new Leaf("合肥");
 16         Component wuhu=new Leaf("芜湖");
 17         Component maanshan=new Leaf("马鞍山");
 18         
 19         Component beijing=new Leaf("北京");
 20         Component shanghai=new Leaf("上海");
 21         Component tianjing=new Leaf("天津");
 22         Component chongqing=new Leaf("重庆");
 23         
 24         china.add(beijing);
 25         china.add(shanghai);
 26         china.add(tianjing);
 27         china.add(chongqing);
 28         china.add(jiangsu);
 29         china.add(anhui);
 30         jiangsu.add(nanjing);
 31         jiangsu.add(suzhou);
 32         anhui.add(hefei);
 33         anhui.add(wuhu);
 34         anhui.add(maanshan);
 35         
 36         china.getChild();
 37         System.out.println("---------------------------");
 38         jiangsu.getChild();
 39         System.out.println("---------------------------");
 40         anhui.getChild();
 41         System.out.println("---------------------------");
 42         beijing.doSth();
 43         shanghai.doSth();
 44         tianjing.doSth();
 45         chongqing.doSth();
 46         System.out.println("---------------------------");
 47         nanjing.doSth();
 48         suzhou.doSth();
 49         System.out.println("---------------------------");
 50         hefei.doSth();
 51         wuhu.doSth();
 52         maanshan.doSth();
 53     }
 54 }
 55 
 56 interface Component{
 57     void doSth();
 58     void add(Component component);
 59     void getChild();
 60 }
 61 
 62 class Leaf implements Component{
 63     private String name;
 64     public Leaf(String name){
 65         this.name=name;
 66     }
 67     @Override
 68     public void doSth() {
 69         System.out.println(name+" Leaf doSth()");
 70     }
 71     public void add(Component component){}
 72     public void getChild(){}
 73 }
 74 
 75 class Composite implements Component{
 76     private String name;
 77     public Composite(String name){
 78         this.name=name;
 79     }
 80     private Vector<Component> components=new Vector<Component>();
 81     @Override
 82     public void doSth() {
 83         System.out.println(name+" Composite doSth()");
 84     }
 85     public void add(Component component){
 86         components.addElement(component);
 87     }
 88     public void remove(Component componet){
 89         components.removeElement(componet);
 90     }
 91     public void getChild(){
 92         for(Component component:components){
 93             if(component instanceof Leaf){
 94                 component.doSth();
 95             }else{
 96                 component.doSth();
 97                 component.getChild();
 98             }
 99         }
100     }
101 }

 

posted @ 2017-05-12 13:43  xiongjiawei  阅读(197)  评论(0编辑  收藏  举报