牛仔褲的夏天

          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 閱讀(569) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 涟水县| 柳林县| 呼玛县| 禄丰县| 绥芬河市| 乌什县| 冀州市| 井陉县| 山阳县| 织金县| 内乡县| 阜宁县| 栾城县| 青神县| 新泰市| 石台县| 清水县| 汉川市| 朝阳县| 华容县| 新乐市| 永新县| 绿春县| 三江| 明光市| 甘孜| 通化县| 新建县| 蕉岭县| 桐梓县| SHOW| 木兰县| 逊克县| 宁安市| 奉贤区| 玉屏| 共和县| 威宁| 增城市| 禄丰县| 县级市|