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

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

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

    java人

    愛生活,更愛java!

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      1 隨筆 :: 2 文章 :: 3 評(píng)論 :: 0 Trackbacks

    2009年10月12日 #

    首先說(shuō)說(shuō)這個(gè)模式產(chǎn)生的背景,需求,或者是一直被<<設(shè)計(jì)模式精解>>里提到的場(chǎng)景。
    起初的需求是打印一個(gè)訂單票據(jù),然后又要求給加上一個(gè)抬頭和一個(gè)腳注,再然后又要求抬頭和腳注的數(shù)量不止一個(gè)。

    其實(shí)說(shuō)一下這個(gè)模式在技術(shù)上的一些要點(diǎn):
    先上一段<<設(shè)計(jì)模式精解>>里的代碼:
    abstract class Component {
        public abstract void prtTicket();
    }

    class SalesTicket extends Component {
        public void prtTicket() {
            System.out.println("Sales Ticket");
        }
    }

    class Decorator extends Component {
        private Component myComp;

        public Decorator(Component myC) {
            myComp = myC;
        }

        public void prtTicket() {
            if(myComp != null)
                myComp.prtTicket();
        }
    }

    class Header1 extends Decorator {

        public Header1(Component myC) {
            super(myC);
        }

        public void prtTicket() {
            System.out.println("Header 1");
            super.prtTicket();
        }
    }

    class Footer1 extends Decorator {

        public Footer1(Component myC) {
            super(myC);
        }

        public void prtTicket() {
            super.prtTicket();
            System.out.println("Footer 1");
        }
    }

    class Main {
        
        public static void main(String[] args) {
            new Header1(new Footer1(new SalesTicket())).prtTicket();
        }
    }
    其中,SalesTicket是被包裝的對(duì)象,也就是核心功能,Decorator是圍繞著這個(gè)核心功能所要添加的附加功能的抽象類。每個(gè)具體的附加功能類都繼承Decorator這個(gè)類。這樣做有兩點(diǎn)意義:
    1.因?yàn)镈ecorator是繼承或?qū)崿F(xiàn)了核心功能類所繼承或?qū)崿F(xiàn)的父類,這樣通過繼承Decorator,使附加功能和核心功能的接口一致。
    2.將Decorator類的構(gòu)造函數(shù)定義成只接受一個(gè)類型為Component類參數(shù)的方法,這樣使得附加功能必須找到一個(gè)核心功能將其包裝,也就是說(shuō)附加功能類是不能單獨(dú)存在的,必須含有一個(gè)核心功能類。

    擴(kuò)展:
    為Decorator類及其所有子類添加無(wú)參構(gòu)造函數(shù),將Main改寫一下:
    class Main {
        
        public static void main(String[] args) {
            new Header1(new Footer1()).prtTicket();
        }
    }
    這樣不包裝核心功能可以直接使用附加功能,換句話說(shuō),不存在附加功能或核心功能,每個(gè)類既可以當(dāng)附加功能也可以當(dāng)核心功能。

    最后說(shuō)一下個(gè)人對(duì)這個(gè)模式的理解:
    Decorate,翻譯成中文意思是裝飾,加了個(gè)-or就變成裝飾者或者叫裝飾器。既然叫裝飾器,就是要對(duì)需要裝飾的東西進(jìn)行包裝,改進(jìn),使其功能要比原來(lái)更多更好,而且既然是裝飾,那就肯定不是主要的,核心的功能,只不過是錦上添花而已,不能喧賓奪主。比如說(shuō),原本一臺(tái)好好的打印機(jī),經(jīng)過裝飾后變成了一 臺(tái)“可以打印的”洗衣機(jī),這花添的就大了點(diǎn),雖說(shuō)原來(lái)的功能還保留著,但是我想這應(yīng)該不是這個(gè)模式提出者的初衷。

    posted @ 2009-10-12 16:50 爪哇豬 閱讀(181) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 全黄大全大色全免费大片| 亚洲av永久无码精品网址| 成人免费无码H在线观看不卡| 免费无码黄动漫在线观看| 99久久国产亚洲综合精品| 在线视频免费观看高清| 亚洲一区二区三区久久久久| 777成影片免费观看| 亚洲熟妇av一区| 亚洲欧洲免费无码| 亚洲国产成人无码AV在线| 在线观看永久免费视频网站| 羞羞网站在线免费观看| 亚洲国产精品一区二区九九| 一级毛片免费观看不收费| 国产自偷亚洲精品页65页| 国产成人AV片无码免费| 亚洲成a人片毛片在线| 成年女人毛片免费播放视频m| 日本亚洲欧美色视频在线播放 | 亚洲欧洲日韩极速播放| 在线免费观看中文字幕| 粉色视频成年免费人15次| 久久亚洲av无码精品浪潮| 97av免费视频| 无码天堂va亚洲va在线va| 伊人久久亚洲综合| 久久久久久精品免费看SSS| 亚洲JIZZJIZZ妇女| 亚洲精品国偷自产在线| 免费人成在线观看69式小视频| 亚洲欧美aⅴ在线资源| 国产亚洲大尺度无码无码专线| 久久综合国产乱子伦精品免费| 亚洲码和欧洲码一码二码三码| 亚洲精品国产日韩无码AV永久免费网 | a级毛片黄免费a级毛片| 亚洲午夜成激人情在线影院| 国产伦精品一区二区三区免费迷| 国产福利免费视频| 亚洲精品国产精品国自产网站 |