結(jié)構(gòu)模式之Composite——合成(部分-整體)模式實(shí)例

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

          public interface Graphics1 {
              
          void draw();

              
          void add(Graphics1 g);

              
          void remove(Graphics1 g);

              Graphics1 gotChild(
          int i);
          }

              樹葉節(jié)點(diǎn):
          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;
              }
          }

              樹枝節(jié)點(diǎn):
          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);
              }
          }

              客戶端調(diào)用:
          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();
              }
          }

             安全方式:
              根節(jié)點(diǎn):
          package composite;

          public interface Graphics {
              
          void draw();
          }

              樹葉節(jié)點(diǎn):
          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");
              }
          }

              樹枝節(jié)點(diǎn):
          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);
              }
          }

              客戶端調(diào)用:
          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 云淡風(fēng)清 閱讀(431) 評論(1)  編輯  收藏 所屬分類: Design Patterns

          評論

          # re: 結(jié)構(gòu)模式之Composite——合成(部分-整體)模式實(shí)例 2008-06-24 09:36 davymemory

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類(15)

          隨筆檔案(15)

          收藏夾(1)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 滕州市| 山东省| 博乐市| 油尖旺区| 西峡县| 泸西县| 同德县| 津市市| 鹿泉市| 隆子县| 凭祥市| 乐昌市| 和田县| 绥宁县| 岱山县| 余干县| 四子王旗| 贵阳市| 襄垣县| 林西县| 江北区| 长沙市| 普陀区| 巢湖市| 兴文县| 阿合奇县| 秭归县| 广平县| 鸡泽县| 美姑县| 清远市| 桐城市| 湘潭县| 广安市| 金阳县| 怀宁县| 高台县| 襄城县| 永春县| 简阳市| 高安市|