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

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

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

    java人

    愛生活,更愛java!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      1 隨筆 :: 2 文章 :: 3 評論 :: 0 Trackbacks

    2009年10月12日 #

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

    其實說一下這個模式在技術上的一些要點:
    先上一段<<設計模式精解>>里的代碼:
    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是被包裝的對象,也就是核心功能,Decorator是圍繞著這個核心功能所要添加的附加功能的抽象類。每個具體的附加功能類都繼承Decorator這個類。這樣做有兩點意義:
    1.因為Decorator是繼承或實現了核心功能類所繼承或實現的父類,這樣通過繼承Decorator,使附加功能和核心功能的接口一致。
    2.將Decorator類的構造函數定義成只接受一個類型為Component類參數的方法,這樣使得附加功能必須找到一個核心功能將其包裝,也就是說附加功能類是不能單獨存在的,必須含有一個核心功能類。

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

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

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

    僅列出標題  
    主站蜘蛛池模板: 污污网站免费观看| 中文无码成人免费视频在线观看| 最近2019中文字幕免费直播| 国产L精品国产亚洲区久久| 最近新韩国日本免费观看| 亚洲一区爱区精品无码| 青青操免费在线视频| 亚洲国产精品无码专区在线观看| 在线观看免费无码专区| 亚洲一级二级三级不卡| 7x7x7x免费在线观看| 亚洲一级大黄大色毛片| 永久免费毛片手机版在线看| 亚洲精品无码少妇30P| 国产无遮挡吃胸膜奶免费看| 曰批免费视频播放免费| 亚洲熟妇无码AV在线播放| 性色午夜视频免费男人的天堂| 91嫩草私人成人亚洲影院| 国产h视频在线观看免费| 亚洲国产精品无码久久久秋霞1| 免费一级毛片在线播放不收费| 羞羞视频在线观看免费| 亚洲成Av人片乱码色午夜| 182tv免费观看在线视频| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲AⅤ优女AV综合久久久| 曰批全过程免费视频在线观看无码 | 精品多毛少妇人妻AV免费久久 | 亚洲高清无码在线观看| 国产精品免费一区二区三区四区| 久久精品国产亚洲AV无码偷窥| 在人线av无码免费高潮喷水| 免费无码又爽又黄又刺激网站| 久久夜色精品国产亚洲AV动态图 | 新最免费影视大全在线播放| 亚洲天堂视频在线观看| 蜜桃精品免费久久久久影院| baoyu777永久免费视频 | 无码人妻一区二区三区免费手机| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 |