<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 閱讀(565) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲成AV人在线观看网址| 好男人www免费高清视频在线| 永久免费看bbb| 亚洲欧洲免费无码| 天天摸夜夜摸成人免费视频| 午夜在线a亚洲v天堂网2019| 最近中文字幕无吗免费高清| 亚洲中文字幕乱码AV波多JI| 免费看美女被靠到爽| 羞羞漫画小舞被黄漫免费| 亚洲国产成人久久综合碰| 一级毛片高清免费播放| 91亚洲精品自在在线观看| 成人免费大片免费观看网站| 亚洲专区一路线二| 国产无遮挡吃胸膜奶免费看| 一级毛片a免费播放王色电影 | 成人无码区免费A∨直播| 国产精品亚洲视频| 无码日韩精品一区二区免费暖暖| 亚洲AV无码日韩AV无码导航 | 无码一区二区三区免费| 亚洲国产高清视频在线观看| 日韩吃奶摸下AA片免费观看| 黑人粗长大战亚洲女2021国产精品成人免费视频| 国产成人免费a在线视频app| 国产一级高青免费| 亚洲国产精品乱码在线观看97| 全免费一级午夜毛片| 亚洲一级片免费看| 亚洲人色大成年网站在线观看| 日本高清免费不卡视频| 成人无码精品1区2区3区免费看 | 亚洲专区先锋影音| 精品免费国产一区二区三区| 一级毛片aa高清免费观看| 亚洲男人天堂2017| 日韩精品免费一区二区三区| 中文字幕免费观看全部电影| 亚洲一区二区三区91| 超清首页国产亚洲丝袜|