離弦之Ray

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

          Head first design patterns 一直被束之高閣,總算考完期末考試。然而,我卻又要開始復習考研的東西了,整天看數學看的十分頭暈,把這本書重新拿來看,權當連環畫來看。

          以前已經看過兩章了,實在太過久遠,只得重溫一下。

          前面的 Introduction 其實是非常有意思的,在這先不贅述了。

          ?

          介紹的第一個 Pattern Strategy Pattern

          通過一個 duck 的例子,在講述 Strategy Pattern 的過程中引出了三個 Design Principles

          它們是:

          1.????????????? Identify the aspects of your application that vary and separate them from what stays the same.

          2.????????????? Program to an interface, not an implementation.

          3.????????????? Favor composition over inheritance.

          Duck 例子完美地體現了以上三個 Principles 。

          一開始 Duck 類是這樣的,里面有三個方法: quack(), swim() display(), 其它一些特殊的 Duck 子類繼承這個父類,并重載 display 方法去顯示各種不同種類的 Duck

          ?

          現在需求變更,需要讓一些 Duck 能夠有飛的能力,理所當然地,在父類中加上了 fly() 這個方法。但一些不能飛的 Duck 類卻同時擁有了 fly() 方法,這顯然是不對的。

          可能有人提出解決的方法是重載那些不需要 fly() 方法的 duck 類的 fly() ,讓這個方法什么也不做,但你有沒有想過如果這么處理,以后再加一些不需要一些方法的子類是不是很繁瑣?

          也許又有人想到了,把 fly() quack() 提取出來,編程 interface 。如果某個子類需要這個能力可以去 implement 這個 interface 。

          有沒有想過后果?每一個子類都要重寫 fly() quack(),OO 的代碼重用的特性蕩然無存。

          ?

          那什么才是最好的解決之道呢???

          書里面給出了答案。

          fly() quack() 兩個功能提取出來這個思路是對的。這里體現了第一個 Principle 。首先聲明 FlyBehavior() QuackBehavior() 兩個 interface ,然后實現各種 fly quack ,比如 FlyWithWings, FlyNoWay ; Quack, Squeak 等等。這里體現了第二個 Principle 。

          ?

          現在的 Duck 父類已經變了,里面有兩個私有變量 FlyBehavior fb, QuackBehavior qb 。

          Duck 父類甚至可以直接聲明成 Abstract 類,當有子類繼承它的時候,可以在構造函數里給 fb qb 初始化的時候直接賦給它需要的 fly quack 種類。這里體現了第三個 Principle 。

          ?

          小小的一個例子已經分析的那么專業,讓我受益匪淺。好書!

          ?

          posted on 2006-07-06 14:17 離弦之ray的技術天空 閱讀(306) 評論(1)  編輯  收藏 所屬分類: Design Pattern

          Feedback

          # re: the first pattern 2006-08-12 00:24 icepv
          是decorator模式吧。
          講得不錯  回復  更多評論
            

          主站蜘蛛池模板: 明光市| 元氏县| 外汇| 鞍山市| 那曲县| 林西县| 田阳县| 富蕴县| 东辽县| 秦皇岛市| 吐鲁番市| 普定县| 陈巴尔虎旗| 井研县| 且末县| 临颍县| 加查县| 宝应县| 稻城县| 阳曲县| 甘南县| 武山县| 霍林郭勒市| 历史| 博野县| 五常市| 黑山县| 龙口市| 垫江县| 华宁县| 昌吉市| 平罗县| 宕昌县| 黄陵县| 府谷县| 宁陵县| 阳江市| 临武县| 南城县| 行唐县| 泸水县|