牛仔褲的夏天

          JAVA是藍(lán)色的- online

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 5 文章 :: 15 評(píng)論 :: 0 Trackbacks

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

          根據(jù)這個(gè)想法來畫一張畫:

          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(
          " 畫了一個(gè)太陽 " );
          ????}

          }


          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(
          " 畫了一片草地 " );
          ????}

          }

          再寫段測(cè)試畫畫的代碼:

          package ?test;

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

          }

          測(cè)試結(jié)果:

          畫了一片草地
          畫了一朵白云
          畫了一個(gè)太陽


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

          posted on 2006-03-27 16:56 luckyrobbie 閱讀(574) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 密山市| 江川县| 安福县| 绵阳市| 石渠县| 延庆县| 德阳市| 星座| 桐城市| 徐闻县| 介休市| 望江县| 美姑县| 佛教| 中阳县| 宜丰县| 海盐县| 瑞昌市| 灌南县| 威海市| 浮梁县| 高淳县| 舒兰市| 古交市| 牟定县| 武汉市| 邹城市| 江油市| 栖霞市| 博湖县| 蒲江县| 秦皇岛市| 弥渡县| 黎川县| 甘德县| 五寨县| 河池市| 台东市| 鄂伦春自治旗| 民乐县| 东山县|