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

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

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

    牛仔褲的夏天

    JAVA是藍色的- online

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      30 隨筆 :: 5 文章 :: 15 評論 :: 0 Trackbacks

    我對decorate模式的理解:
    1-首先要有一個Interface,提供一個通用的方法;
    2-其次有n多個class來實現這個接口中的方法,這些實現方法在功能上應該是并列的,但不是必須的,從而可以根據需要decorate那個需要被修飾的初始對象。
    3-最后這些class都有一個帶有Interface作為參數的構造方法和一個Interface的屬性,這樣在構造的時候就可以取得那個需要修飾的對象的實例,然后在實現Interface的方法里面,首先實現修飾對象實例的修飾方法,然后再進行自己的decorate方法。

    根據這個想法來畫一張畫:

    package ?test;

    public ? interface ?Painting? {
    ????
    public ? void ?paint();
    }


    class ?SunPainting? implements ?Painting? {
    ????Painting?painting?
    = ? null ;

    ????
    public ?SunPainting()? {
    ????}


    ????
    public ?SunPainting(Painting?painting)? {
    ????????
    this .painting? = ?painting;
    ????}


    ????
    public ? void ?paint()? {
    ????????
    if ?(painting? != ? null )? {
    ????????????painting.paint();
    ????????}

    ????????System.out.println(
    " 畫了一個太陽 " );
    ????}

    }


    class ?CloudPainting? implements ?Painting? {
    ????Painting?painting?
    = ? null ;

    ????
    public ?CloudPainting()? {
    ????}


    ????
    public ?CloudPainting(Painting?painting)? {
    ????????
    this .painting? = ?painting;
    ????}


    ????
    public ? void ?paint()? {
    ????????
    if ?(painting? != ? null )? {
    ????????????painting.paint();
    ????????}

    ????????System.out.println(
    " 畫了一朵白云 " );
    ????}

    }


    class ?LawnPainting? implements ?Painting? {
    ????Painting?painting?
    = ? null ;

    ????
    public ?LawnPainting()? {
    ????}


    ????
    public ?LawnPainting(Painting?painting)? {
    ????????
    this .painting? = ?painting;
    ????}


    ????
    public ? void ?paint()? {
    ????????
    if ?(painting? != ? null )? {
    ????????????painting.paint();
    ????????}

    ????????System.out.println(
    " 畫了一片草地 " );
    ????}

    }

    再寫段測試畫畫的代碼:

    package ?test;

    public ? class ?TestPainting? {
    ????
    public ? static ? void ?main(String[]?args) {
    ????????
    new ?SunPainting( new ?CloudPainting( new ?LawnPainting())).paint();
    ????}

    }

    測試結果:

    畫了一片草地
    畫了一朵白云
    畫了一個太陽


    ?最后有個問題:為什么不直接定義一個畫畫的類,然后把這些該怎么畫的事情分別通過方法來實現呢? 那么什么情況下使用decorate模式更為合適呢?

    posted on 2006-03-27 16:56 luckyrobbie 閱讀(564) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 国产午夜精品免费一区二区三区| 在线精品自拍亚洲第一区| 国产精品免费观看视频| 国产yw855.c免费视频| 亚洲mv国产精品mv日本mv| 91精品导航在线网址免费| 亚洲国产第一页www| 日本免费中文字幕| 精品日韩亚洲AV无码一区二区三区 | 免费在线观看一级毛片| 国产精品日本亚洲777| 国产91在线免费| 男人和女人高潮免费网站| 亚洲人成网站色在线入口| 一级黄色免费大片| 久久久久亚洲?V成人无码| 99精品全国免费观看视频..| 亚洲午夜久久久影院| 久久大香伊焦在人线免费| 亚洲精品成人网站在线播放| 国产男女爽爽爽爽爽免费视频| 亚洲日本VA午夜在线电影| 免费a级毛片视频| 一级有奶水毛片免费看| 亚洲国产精品成人精品无码区在线| 亚洲国产最大av| 免费毛片a在线观看67194| 亚洲AV日韩AV一区二区三曲| 国产片免费福利片永久| 极品色天使在线婷婷天堂亚洲| 日韩精品免费一区二区三区| 国产精品亚洲а∨无码播放不卡 | 亚洲精品天堂无码中文字幕| 国产免费av片在线看| 久久亚洲精品国产亚洲老地址 | jizz在线免费观看| 亚洲精品无码久久久久去q| 日韩精品无码免费专区午夜| 久久伊人久久亚洲综合| 曰批全过程免费视频网址| 久久精品国产亚洲AV无码麻豆|