在路上

          姿勢就是力量

           

          《JAVA與模式》重讀心得和筆記 <一. 設計模式簡言>


          閻宏的《JAVA與模式》,本來已經在書堆里面塵封了。之前第一遍看過后,有些地方覺得比較抽象,也沒細體會。
          一晃兩年過去,偶然因為一個設計模式的疑惑,把它又找出來了(書很多,找得很辛苦)。重讀這本書時,感覺理解
          起來和兩年前完全不同了,幾十頁一氣呵成。很久沒有這種讀書的狀態了。于是決定從頭再讀,讀了還不算,順便記點
          筆記,貽笑大方。


          一節,設計模式的一些基礎概念。大概都是些老生常談的東西,但缺少它,就不是完整的筆記了。所以題目叫簡言。

           =================================================================================

          Peter Coad 軟件設計目標:

          1. 可擴展性(Extensibility)

          新的功能可以很容易的加入到系統

          2. 靈活性(Flexibility)

          可以允許代碼修改平穩地發生,而不會設計到很多其他的模塊

          3. 可插入性(Pluggability)

          可以很容易地將一個類抽出去,同時將另一個有同樣接口的類加入進來


          達成理想軟件設計目標的關鍵是設計的抽象化。

          抽象化的基石:接口和抽象類

          一、接口 (Interface)

          接口是實現構件的可插入性(Pluggability)的關鍵。

          1. 接口保證關聯的可插入性

          通過接口,我們可以實現動態切換一個類到另一個類的關聯關系。 比如 類A 關聯了類 B,
          如果需求更改,類 A 需要關聯類 C,我們只有修改類A 的代碼。 如果類B和類C行為相似,
          那我們可以提煉出接口 E。類A 只需要關聯到接口E,就可以在不修改代碼的情況下,自由
          切換類A與類B或者類C的關聯關系。

          2. 接口保證調用的可插入性

          同樣,一個對象不可避免地需要調用其他對象的方法。這種調用不一定非得是某一個具體類,
          而可以是一個接口。這樣一來,任何實現了這個接口的具體類都可以被當前對象調用;而當前
          對象到底調用的是哪一個具體類的實例則完全可以動態地決定。

          因此,接口提供了關聯以及方法調用上的可插入性,軟件系統的規模越大,生命周期越長,接口
          的重要性就越大。接口使得軟件系統在靈活性和可擴展性、可插入性方面得到保證。

           

          接口的分類:

          1. 單方法接口。 如 Runnable

          2. 標識接口。如 Serializable、java.rmi.Remote

          3. 常量接口。 不推薦


           

          二、抽象類 (Abstract Class)

          抽象類的重要設計原則:

          1. 抽象類是用來繼承的;具體類不是用來繼承的

          2. 抽象類應該擁有盡可能多的共同代碼 (代碼復用、節約內存資源)

          3. 抽象類應該擁有盡可能少的數據 (節省內存資源)    



          接口與抽象類的優缺比較:

          1. 兩者最大的區別,java 抽象類可以提供某些方法的部分實現,而java接口則不可以。

          2. 子類只能繼承一個抽象類,但可以實現多個接口。

          3.  代碼重構方面。將一個單獨的java具體類重構成一個java接口的實現是很容易的,
               而為一個已有的具體類添加一個java抽象類作為抽象類型取不那么容易,因為這個
               具體類有可能已經有了一個超類。

          4.  java接口是定義混合類型(Mixin Type)的理想工具。所謂混合類型,就是在一個類
              的主類型之外的次要類型。一個混合類型表明一個類不僅僅具有某個主類型的行為,
              而且具有其他的次要行為。比如 Hashtable


          聯合使用java接口和java抽象類:

          由于java抽象類具有提供缺省實現的優點,而java接口具有其他所有的優點。因此聯合使用
          兩者就是一個很好的選擇。

          首先,聲明類型的工作仍然是java接口承擔的,但是同時給出的還有一個java抽象類,為這個
          接口給出一個缺省實現。其他同屬于這個抽象類型的具體類可以選擇實現這個java接口,也可
          以選擇繼承自這個抽象類。

          這其實就是缺省適配模式(Default Adapter)。Java API 中也用了這種缺省適配模式,而且全都
          遵循一定的命名規范:Abstract + 接口名。比如接口Collection,抽象類的名字是AbstractCollection。

          這種聯合使用接口和抽象類的做法,可以充分利用兩者的優點,克服兩者的缺點。

          posted on 2007-08-17 16:22 Samuel.Mo 閱讀(305) 評論(0)  編輯  收藏 所屬分類: Java設計模式

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东乡县| 仙桃市| 巴塘县| 紫阳县| 东莞市| 太原市| 莱阳市| 西安市| 永吉县| 朝阳市| 正蓝旗| 建德市| 北宁市| 翼城县| 南宫市| 富川| 三原县| 迭部县| 沙田区| 通海县| 营山县| 确山县| 黄山市| 崇礼县| 廊坊市| 资中县| 汝州市| 巴彦淖尔市| 翁源县| 东乡县| 绿春县| 太湖县| 兴仁县| 海兴县| 华安县| 新干县| 眉山市| 永德县| 类乌齐县| 阳城县| 宁武县|