<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    結構模式之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 云淡風清 閱讀(428) 評論(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)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人免费区一区二区三区 | 婷婷国产偷v国产偷v亚洲| 中文字幕av无码不卡免费| 亚洲国产精品无码久久久久久曰| 亚洲人成人网站在线观看| 久久精品国产亚洲AV未满十八| 国产精品成人啪精品视频免费| 免费A级毛片无码A∨ | 免费人妻无码不卡中文字幕系| 国产精品视频永久免费播放| 亚洲日本乱码一区二区在线二产线 | 亚洲国产日韩在线人成下载 | 亚洲综合日韩中文字幕v在线| 亚洲综合一区国产精品| 黄色片在线免费观看| 亚洲一区精彩视频| 日韩免费高清一级毛片在线| 国产精品亚洲专区无码不卡| 国产成人亚洲综合| 久久成人免费大片| 亚洲一区二区三区在线| 国产精品久久香蕉免费播放| 美女无遮挡拍拍拍免费视频| 亚洲成年人在线观看| 成年性午夜免费视频网站不卡| 亚洲毛片在线观看| 免费A级毛片无码免费视| 亚洲日韩一区精品射精| 亚洲色偷偷综合亚洲AV伊人| 久久精品免费视频观看| 456亚洲人成在线播放网站| 亚洲国产精品丝袜在线观看| 日本卡1卡2卡三卡免费| 久久亚洲精品国产精品婷婷 | 超pen个人视频国产免费观看| 色婷婷六月亚洲婷婷丁香| 中文字幕影片免费在线观看| 深夜特黄a级毛片免费播放| 亚洲最大在线视频| 在线中文高清资源免费观看| 国产精品免费观看视频|