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

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

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

    設計模式學習筆記(六)—Decorator裝飾模式

    Posted on 2007-11-28 20:31 flustar 閱讀(1188) 評論(0)  編輯  收藏 所屬分類: Design Patterns

    《設計模式》一書對Decorator是這樣描述的:
     動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式比生成子類更為靈活。
    也就是說:動態地給對象添加一些額外的功能。它的工作原理是:創建一個始于Decorator對象(負責新功能的對象)終止于原對象的一個對象的“鏈”。例如,我們要為超市的收銀臺設計一個打印票據的程序,有的需要打印票據的頭信息,有的需要打印票據的頁腳信息,有的只需要打印票據的內容。如果針對每一種情況都修改一次程序,勢必會很麻煩。這時我們可以考慮使用Decorator模式。其結構類圖如下:
     

    代碼如下:
    abstract class Component{
     abstract public void printTicket();
    }
    class SalesTicket extends Component{
     public void printTicket() {
      System.out.println("打印出salesTicket的內容");
     }
    }
    abstract class TicketDecorator extends Component{
     private Component myTrailer;
     public TicketDecorator(Component myComponent){
      myTrailer=myComponent;
     }
     public void callTrailer(){
      if(myTrailer!=null)
       myTrailer.printTicket();
     }
    }
    class Header extends TicketDecorator{
     public Header(Component myComponent){
      super(myComponent);
     }
     public void printTicket(){
      System.out.println("打印salesTicket的頭信息");
      super.callTrailer();
      
     }
    }
    class Footer extends TicketDecorator{
     public Footer(Component myComponent){
      super(myComponent);
     }
     public void printTicket(){
      super.callTrailer();
      System.out.println("打印salesTicket的頁腳信息");
     }
    }
    public class Client {

     public static void main(String[] args) {
      System.out.println("====================================");
      new Header(new Footer(new SalesTicket())).printTicket();
      System.out.println("====================================");
      new Footer(new Header(new SalesTicket())).printTicket();
      System.out.println("====================================");
     }

    }
    輸出結果如下:
    ====================================
    打印salesTicket的頭信息
    打印出salesTicket的內容
    打印salesTicket的頁腳信息
    ====================================
    打印salesTicket的頭信息
    打印出salesTicket的內容
    打印salesTicket的頁腳信息
    ====================================
    從這個例子我們可以看出,Decorator模式把問題分為兩部分:
    1) 如何實現提供新功能的對象。
    2) 如何為每種特殊情況組織對象。
    這樣能夠將Decorator對象的實現與決定如何使用Decorator的對象分離開來,從而提高了內聚性,因為每個Decorator對象只用關心自己添加的功能,無需關心自己是如何被加入到對象鏈中。還可以任意地重排Decorator的順序,無需改變其任何代碼。
    小結:Decorator模式的適用場合是,各種可選的功能在另一個肯定要執行的功能之前或之后執行。

     

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 四虎国产精品免费永久在线| 久久精品国产亚洲av天美18| 在线观看片免费人成视频无码| 国产传媒在线观看视频免费观看| 日本亚洲免费无线码| 免费观看激色视频网站(性色)| 亚洲综合激情六月婷婷在线观看| 久久久久成人精品免费播放动漫| 国产亚洲美女精品久久久久狼| 福利免费在线观看| 亚洲精品亚洲人成在线观看| 国产免费内射又粗又爽密桃视频| 亚洲精品无码成人片在线观看| 窝窝影视午夜看片免费| 中文字幕日韩亚洲| 两个人看的www免费视频中文| 亚洲成AV人片在线播放无码| 久久黄色免费网站| 亚洲精品不卡视频| 成年女人看片免费视频播放器| 亚洲国产成人久久精品大牛影视| 免费国产精品视频| 国产成人无码免费网站| 亚洲av综合av一区| 无码人妻久久一区二区三区免费丨| 亚洲国产精品成人综合色在线婷婷| A在线观看免费网站大全| 亚洲AV无码成人精品区日韩| 在线a亚洲v天堂网2019无码| 日韩精品无码免费一区二区三区| 波多野结衣亚洲一级| 亚洲精品tv久久久久| 一个人免费日韩不卡视频| 中文有码亚洲制服av片| 亚洲乱码国产一区网址| 日韩精品无码一区二区三区免费 | 拍拍拍又黄又爽无挡视频免费| 苍井空亚洲精品AA片在线播放 | 亚洲一区二区在线免费观看| 德国女人一级毛片免费| 中国一级特黄的片子免费 |