<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      讀《Head First Design Patterns》(第三章 裝飾者模式)

      第3章講了裝飾者模式,書中列舉了一個星巴克咖啡的例子,比較淺顯的闡述了這種模式。我將力求提取其中實際的部分,并消化之,作此記錄,以供日后參考。 先從一條金科玉律(Open-Closed Principle)開始吧:

      Classes should be open for extension,but closed for modification

      我的理解是類的設計應該做到有新的變化易于擴展但對原有的代碼不能有修改。

      這當然好啦,只是聽起來似乎挺矛盾的,也不知道該怎么實現。但的確有相應的OO技巧,等著瞧吧。先看一下書里有段話值得我們注意,特別象我這種不懂OO的OO崇拜者:

      applying the Open-Closed Principle EVERYWHERE is wasteful, unnecessary, and can lead to complex, hard to understand code.

      Following the Open-Closed Principle usually introduces new levels of abstraction,which adds complexity to our code.You want to concentrate on those areas that are most likely to change in your designs and apply the principles there.

      好了,現在我們來正視觀察者模式是如何實現這個原則的:

      裝飾者模式定義:The Decorator Pattern attaches additional
      responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality.

      看看書中的例子:

      代碼如下:

      Beverage.java

      package com.Decorator.www;

      public abstract class Beverage {

       String description = "Unknown Beverage";
       public String getDescription() {
        return description;
       }
       public abstract double cost();

      }

       public abstract String getDescription();

      }

       

      DarkRoast.java

      package com.Decorator.www;

      public class DarkRoast extends Beverage {
       
       public DarkRoast(){
        
        super.description = "description";
       }
       public double cost() {
        // TODO 自動生成方法存根
        return .78;
       }

      }

       

      Mocha.java

      package com.Decorator.www;

      public class Mocha extends CondimentDecorator {

       Beverage beverage;
       public Mocha(Beverage beverage) {
        this.beverage = beverage;
       }
       
       public String getDescription() {
        // TODO 自動生成方法存根
        return beverage.getDescription() + ", Mocha";
       }

       public double cost() {
        // TODO 自動生成方法存根
        return .20 + beverage.cost();
       }

      }

      StarbuzzCoffee.java

      package com.Decorator.www;

      public class StarbuzzCoffee {

       /**
        * @param args
        */
       public static void main(String[] args) {
        // TODO 自動生成方法存根
        Beverage beverage = new Espresso();
        System.out.println(beverage.getDescription()
        + "$" + beverage.cost());
        Beverage beverage2 = new DarkRoast();
        beverage2 = new Mocha(beverage2);

        beverage2 = new Mocha(beverage2);
        beverage2 = new Whip(beverage2);
        System.out.println(beverage2.getDescription()
        + "$" + beverage2.cost());
        Beverage beverage3 = new HouseBlend();
        beverage3 = new Soy(beverage3);
        beverage3 = new Mocha(beverage3);
        beverage3 = new Whip(beverage3);
        System.out.println(beverage3.getDescription()
        + "$" + beverage3.cost());
       }

      }

      其他略

      沒錯,就是包裝者模式,需要添加一個新功能就包一層,同時需要另外一個新功能就再包一層。基本的原理是這樣的:如果需要對A類裝飾,就從A類的父類繼承一個裝飾者虛擬類(當然也可以用接口,可能接口更理想),然后從這個虛擬類(接口)實現具體的裝飾者類,在具體裝飾者類中從構造函數引入被包裝者對象,然后對該對象添加額外的功能。(The decorator adds its own behavior either before and/or after delegating to the object itdecorates to do the rest of the job.)這樣很容易就擴展了被包裝類的功能,也沒有修改被包裝類和他的父類。

      裝飾者模式很好的彌補了繼承的不足之處,可以真正的做到Open-Closed Principle原則,不過也有不足的一面:

      1.sometimes add a lot of small classes to a design and this occasionally results in a design that’s less than straightforward for others to understand.

      2.you can usually insert decorators transparently and the client never has to knowit’s dealing with a decorator

      關于這些我也只是字面理解,在以后的實際應用中慢慢體會吧!

       

      posted @ 2006-02-25 08:56  紅心李  閱讀(120)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色一伊人区二区亚洲最大| 四虎库影成人在线播放| 亚洲精品av一二三区无码| 人妻精品久久无码专区涩涩| 国产视频不卡一区二区三区| 伊人av超碰伊人久久久| 日本一区二区三区内射| 东京热一精品无码av| 成人精品久久一区二区三区| 夜色福利站WWW国产在线视频| 沈丘县| 成人午夜无人区一区二区| 精品无码国产日韩制服丝袜| 亚洲乱码av中文一区二区| 精品视频国产狼友视频| 九九热免费在线观看视频| 日本欧美大码aⅴ在线播放| 亚洲乱码中文字幕小综合| 国内精品自线在拍| 2021精品亚洲中文字幕| 国产午夜福利视频在线| 亚洲精品天堂一区二区| 97精品人妻系列无码人妻| 国语做受对白XXXXX在线| 欧美videosdesexo吹潮| 亚洲一区二区三区自拍天堂| 中文字幕亚洲综合第一页| 国产欧美一区二区精品性色| 深夜释放自己在线观看| 田东县| 婷婷综合亚洲| 一区二区三区av天堂| 国产无码高清视频不卡| 老色99久久九九爱精品| 欧美人人妻人人澡人人尤物| 欧美老熟妇乱子伦牲交视频| 国产白丝无码免费视频| 国产在线中文字幕精品| 亚洲欧美人成人综合在线播放| 亚洲av色香蕉一区二区三区精品| 亚洲精品乱码久久久久久中文字幕 |