牛仔褲的夏天

          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 閱讀(574) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 彭阳县| 淳安县| 尚义县| 乐山市| 上栗县| 沧源| 波密县| 华坪县| 阿巴嘎旗| 周至县| 页游| 乌苏市| 灯塔市| 逊克县| 辽宁省| 门源| 河源市| 锡林郭勒盟| 靖西县| 霍山县| 彭水| 临清市| 平凉市| 五指山市| 广饶县| 刚察县| 嘉鱼县| 策勒县| 冷水江市| 张家港市| 兴隆县| 凌源市| 寿宁县| 双牌县| 昆明市| 永德县| 阿坝县| 旬阳县| 成都市| 临武县| 章丘市|