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

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

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

    結(jié)構(gòu)模式-Composite模式

    一:使用場(chǎng)景

       1)使用的地方:樹形結(jié)構(gòu),分支結(jié)構(gòu)等

       2)使用的好處:降低客戶端的使用,為了達(dá)到元件與組合件使用的一致性,增加了元件的編碼

       3)使用后的壞處:代碼不容易理解,需要你認(rèn)真去研究,發(fā)現(xiàn)元件與組合件是怎么組合的

    二:一個(gè)實(shí)際的例子

        畫圖形,這個(gè)模式,稍微要難理解一點(diǎn),有了例子就說(shuō)明了一切,我畫的圖是用接口做的,代碼實(shí)現(xiàn)是抽象類為基類,你自己選擇了,接口也可以。

       


    1)先建立圖形元件

       package com.mike.pattern.structure.composite;
    /**
    * 圖形元件

    * @author taoyu

    * @since 2010-6-23
    */
    public abstract class Graph {
    /**圖形名稱*/
    protected String name;

    public Graph(String name){
       this.name=name;
    }

    /**畫圖*/
    public abstract void draw()throws GraphException;

    /**添加圖形*/
    public abstract void add(Graph graph)throws GraphException;

    /**移掉圖形*/
    public abstract void remove(Graph graph)throws GraphException;

    }

    2)建立基礎(chǔ)圖形圓

    package com.mike.pattern.structure.composite;
    import static com.mike.util.Print.print;

    /**
    * 圓圖形

    * @author taoyu

    * @since 2010-6-23
    */
    public class Circle extends Graph {

    public Circle(String name){
       super(name);
    }

    /**
    * 圓添加圖形
    * @throws GraphException 
    */
    @Override
    public void add(Graph graph) throws GraphException {
       throw new GraphException("圓是基礎(chǔ)圖形,不能添加");
    }

    /**
    * 圓畫圖
    */
    @Override
    public void draw()throws GraphException {
       print(name+"畫好了");
    }

    /**
    * 圓移掉圖形
    */
    @Override
    public void remove(Graph graph)throws GraphException {
       throw new GraphException("圓是基礎(chǔ)圖形,不能移掉");
    }

    }

    3)建立基礎(chǔ)圖形長(zhǎng)方形

    package com.mike.pattern.structure.composite;
    import static com.mike.util.Print.print;
    /**
    * 長(zhǎng)方形

    * @author taoyu

    * @since 2010-6-23
    */
    public class Rectangle extends Graph {

    public Rectangle(String name){
       super(name);
    }

    /**
    * 長(zhǎng)方形添加
    */
    @Override
    public void add(Graph graph) throws GraphException {
       throw new GraphException("長(zhǎng)方形是基礎(chǔ)圖形,不能添加");
    }

    /**
    * 畫長(zhǎng)方形
    */
    @Override
    public void draw() throws GraphException {
       print(name+"畫好了");
    }

    @Override
    public void remove(Graph graph) throws GraphException {
       throw new GraphException("長(zhǎng)方形是基礎(chǔ)圖形,不能移掉");
    }

    }

    4)最后簡(jiǎn)歷組合圖形

    package com.mike.pattern.structure.composite;

    import java.util.ArrayList;
    import java.util.List;
    import static com.mike.util.Print.print;

    /**
    * 圖形組合體

    * @author taoyu

    * @since 2010-6-23
    */
    public class Picture extends Graph {
    private List<Graph> graphs;

    public Picture(String name){
       super(name);
       /**默認(rèn)是10個(gè)長(zhǎng)度*/
       graphs=new ArrayList<Graph>();
    }


    /**
    * 添加圖形元件
    */
    @Override
    public void add(Graph graph) throws GraphException {
       graphs.add(graph);
    }

    /**
    * 圖形元件畫圖
    */
    @Override
    public void draw() throws GraphException {
       print("圖形容器:"+name+" 開始創(chuàng)建");
       for(Graph g : graphs){
        g.draw();
       }
    }

    /**
    * 圖形元件移掉圖形元件
    */
    @Override
    public void remove(Graph graph) throws GraphException {
       graphs.remove(graph);
    }

    }

    5)最后測(cè)試

    public static void main(String[] args)throws GraphException {
       /**畫一個(gè)圓,圓里包含一個(gè)圓和長(zhǎng)方形*/
       Picture picture=new Picture("立方體圓");
       picture.add(new Circle("圓"));
       picture.add(new Rectangle("長(zhǎng)方形"));
      
       Picture root=new Picture("怪物圖形"); 
       root.add(new Circle("圓"));
       root.add(picture);
       root.draw();
    }

    6)使用心得:的確降低了客戶端的使用情況,讓整個(gè)圖形可控了,當(dāng)是你要深入去理解,才真名明白采用該模式的含義,不太容易理解。

    posted on 2012-08-06 17:49 陳睿 閱讀(251) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

    導(dǎo)航

    <2012年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产天堂久久久久久| 免费a级毛片高清视频不卡 | 在线人成精品免费视频| 国产精品亚洲A∨天堂不卡| 免费无码午夜福利片69| 亚洲日韩VA无码中文字幕| 日本中文字幕免费看| 亚洲中文字幕第一页在线| 男女拍拍拍免费视频网站| 亚洲AV福利天堂一区二区三| 午夜免费福利视频| 亚洲另类小说图片| 毛片免费在线视频| 瑟瑟网站免费网站入口| 久久亚洲国产成人精品无码区| 成人免费无码H在线观看不卡| 亚洲va久久久噜噜噜久久狠狠| 久久er国产精品免费观看2| 亚洲精品在线网站| 女人毛片a级大学毛片免费| 亚洲AV女人18毛片水真多| 免费吃奶摸下激烈视频| 三上悠亚在线观看免费| 图图资源网亚洲综合网站| 成人福利免费视频| 国产精品亚洲专区无码WEB| 亚洲精品视频免费| 少妇人妻偷人精品免费视频| 久久精品国产亚洲av麻豆蜜芽 | 日本一道综合久久aⅴ免费| 一级特黄a免费大片| 亚洲国产女人aaa毛片在线| 国产香蕉免费精品视频| 猫咪www免费人成网站| 亚洲国产精品无码久久SM| 在线观看免费人成视频| 亚洲日韩AV一区二区三区四区| 亚洲性日韩精品一区二区三区 | 亚洲理论在线观看| 又大又硬又爽免费视频| 日韩免费在线观看视频|