結構模式之Composite——合成(部分-整體)模式實例

              上一篇,總結了結構模式的一些特點,這一篇分別介紹兩種方式的實現。
             
              這里我們用繪圖這個例子來說明Composite模式,通過一些基本圖像元素(直線、圓等)以及一些復合圖像元素(由基本圖像元素組合而成)構建復雜的圖形樹。在設計中我們對每一個對象都配備一個draw()方法,在調用時,會顯示相關的圖形。可以看到,這里復合圖像元素(Picture1、Picture)它在充當對象的同時,又是那些基本圖像元素的一個容器。
             
              透明方式:
              根節點:
          package composite;

          public interface Graphics1 {
              
          void draw();

              
          void add(Graphics1 g);

              
          void remove(Graphics1 g);

              Graphics1 gotChild(
          int i);
          }

              樹葉節點:
          package composite;

          public class Line1 implements Graphics1 {
              
          public void draw(){
                  System.out.println(
          "Drawing Line");
              }

              
          public void add(Graphics1 g){
                 
          return;
              }

              
          public void remove(Graphics1 g){
                   
          return;
              }

              
          public Graphics1 gotChild(int i){
                   
          return null;
              }
          }

          package composite;

          public class Circle1 implements Graphics1 {
              
          public void draw(){
                  System.out.println(
          "Drawing Circle");
              }

             
          public void add(Graphics1 g){
                 
          return;
              }

              
          public void remove(Graphics1 g){
                   
          return;
              }

              
          public Graphics1 gotChild(int i){
                   
          return null;
              }
          }

          package composite;

          public class Rectangle1 implements Graphics1 {
              
          public void draw(){
                   System.out.println(
          "Drawing Rectangle");
              }

             
          public void add(Graphics1 g){
                 
          return;
              }

              
          public void remove(Graphics1 g){
                   
          return;
              }

              
          public Graphics1 gotChild(int i){
                   
          return null;
              }
          }

              樹枝節點:
          package composite;
          import java.util.Vector;

          public class Picture1 implements Graphics1 {
              
          private Vector list = new Vector(10);

              
          public void draw(){
                  
          for (int i = 0; i < list.size(); i++) {
                      Graphics1 g 
          = (Graphics1) list.get(i);
                      g.draw();
                  }
              }

              
          public void add(Graphics1 g){
                  list.add(g);
              }

              
          public void remove(Graphics1 g){
                  list.remove(g);
              }

              
          public Graphics1 gotChild(int i){
                  
          return (Graphics1)list.get(i);
              }
          }

              客戶端調用:
          package composite;

          public class Client1 {

              
          private static Picture1 picture= new Picture1();
              
          public static void main(String[] args){
                 picture.add(
          new Circle1());
                 picture.add(
          new Line1());
                 picture.add(
          new Rectangle1());
                 picture.draw();
              }
          }

             安全方式:
              根節點:
          package composite;

          public interface Graphics {
              
          void draw();
          }

              樹葉節點:
          package composite;

          public class Circle implements Graphics {
              
          public void draw(){
                  System.out.println(
          "Drawing Circle");
              }
          }

          package composite;

          public class Line implements Graphics {
              
          public void draw(){
                  System.out.println(
          "Drawing Line");
              }
          }


          package composite;

          public class Rectangle implements Graphics {
              
          public void draw(){
                   System.out.println(
          "Drawing Rectangle");
              }
          }

              樹枝節點:
          package composite;
          import java.util.Vector;

          public class Picture implements Graphics {
              
          private Vector list = new Vector(10);

              
          public void draw(){
                  
          for (int i = 0; i < list.size(); i++) {
                      Graphics g 
          = (Graphics) list.get(i);
                      g.draw();
                  }
              }

              
          public void add(Graphics g){
                  list.add(g);
              }

              
          public void remove(Graphics g){
                  list.remove(g);
              }

              
          public Graphics gotChild(int i){
                  
          return (Graphics)list.get(i);
              }
          }

              客戶端調用:
          package composite;

          public class Client {

              
          private static Picture picture= new Picture();
              
          public static void main(String args[]){
                 picture.add(
          new Circle());
                 picture.add(
          new Line());
                 picture.add(
          new Rectangle());
                 picture.draw();
              }
          }


          posted on 2008-06-23 23:11 云淡風清 閱讀(431) 評論(1)  編輯  收藏 所屬分類: Design Patterns

          評論

          # re: 結構模式之Composite——合成(部分-整體)模式實例 2008-06-24 09:36 davymemory

          你好,我是IT獵頭Camille,主要負責上海地區IT方面的職位。希望以后大家一起在職業路上共同進步。不介意的話請加我的MSN:davycamille@hotmail.com  回復  更多評論   

          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類(15)

          隨筆檔案(15)

          收藏夾(1)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南宫市| 皋兰县| 玛纳斯县| 雅江县| 大同市| 班戈县| 乐业县| 泰州市| 乳山市| 井陉县| 平远县| 石渠县| 昌宁县| 蓝田县| 秦皇岛市| 沙河市| 油尖旺区| 河间市| 乌兰县| 札达县| 石阡县| 古田县| 车致| 新兴县| 浦东新区| 定州市| 灌阳县| 锡林郭勒盟| 宝应县| 田林县| 于田县| 三门县| 南江县| 赤城县| 桐城市| 义乌市| 进贤县| 阜阳市| 吉安县| 绩溪县| 富锦市|