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

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

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

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    JAVA與模式》學習筆記之面向對象設計原則

    面向對象設計的基石是“開—閉”原則。

    “開一閉”原則講的是:一個軟件實體應當對擴展開放,對修改關閉。

    這個規(guī)則說的是,在設計一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展。

    從另外一個角度講,就是所謂的“對可變性封裝原則”。“對可變性封裝原則”意味著兩點:

    1 . 一種可變性不應當散落在代碼的很多角落里,而應當被封裝到一個對象里面。同一種可變性的不同表象意味著同一個繼承等級結構中的具體子類。

    2. 一種可變性不應當與另一種可變性混合在一起。即類圖的繼承結構一般不應超過兩層。

    做到“開—閉”原則不是一件容易的事,但是也有很多規(guī)律可循,這些規(guī)律同樣也是設計原則,它們是實現(xiàn)開—閉原則的工具。

    ?

    里氏代換原則

    ?

    里氏代換原則:如果對每一個類型為 T1 的對象 o1, 都有類型為 T2 的對象 o2 ,使得以 T1 定義的所有程序 P 在所有對象 o1 都換成 o2 時,程序 P 的行為沒有變化,那么類型 T2 T1 的子類型。

    即如果一個軟件實體使用的是基類的話那么也一定適用于子類。但反過來的代換不成立。

    如果有兩個具體類 A B 之間的關系違反了里氏代換原則,可以在以下兩種重構方案中選擇一種:

    1 創(chuàng)建一個新的抽象類 C, 作為兩個具體類的超類,將 A B 共同的行為移動到 C 中,從而解決 A B 行為不完全一致的問題。

    2 B A 的繼承關系改寫為委派關系。

    ?

    依賴倒轉原則

    ?

    依賴倒轉原則講的是:要依賴于抽象,不要依賴于具體。即針對接口編程,不要針對實現(xiàn)編程。針對接口編程的意思是,應當使用接口和抽象類進行變量的類型聲明、參量的類型聲明,方法的返還類型聲明,以及數(shù)據(jù)類型的轉換等。不要針對實現(xiàn)編程的意思就是說,不應當使用具體類進行變量的類型聲明、參量的類型聲明,方法的返還類型聲明,以及數(shù)據(jù)類型的轉換等。

    依賴倒轉原則雖然強大,但卻不易實現(xiàn),因為依賴倒轉的緣故,對象的創(chuàng)建很可能要使用對象工廠,以避免對具體類的直接引用,此原則的使用還會導致大量的類。維護這樣的系統(tǒng)需要較好的面向對象的設計知識。

    此外,依賴倒轉原則假定所有的具體類都是變化的,這也不總是正確的。有一些具體類可能是相當穩(wěn)定、不會發(fā)生變化的,消費這個具體類實例的客戶端完全可以依賴于這個具體類。

    ?

    接口隔離原則

    ?

    接口隔離原則講的是:使用多個專門的接口比使用單一的接口要好。從客戶的角度來說:一個類對另外一個類的依賴性應當是建立在最小的接口上的。如果客戶端只需要某一些方法的話,那么就應當向客戶端提供這些需要的方法,而不要提供不需要的方法。提供接口意味著向客戶端作出承諾,過多的承諾會給系統(tǒng)的維護造成不必要的負擔。

    ?

    合成、聚合復用原則

    ?

    合成、聚合復用原則就是在一個新的對象里面使用一些已有的對象,使之成為新對象的一部份,新的對象通過向這些對象的委派達到復用已有功能的目的。這個原則有一個簡短的描述:要盡量使用合成、聚合,盡量不要使用繼承。

    合成、聚合有如下好處:

    新對象存取成分對象的唯一方法是通過成分對象的接口。

    這種復用是黑箱復用,因為成分對象的內(nèi)部細節(jié)是新對象所看不到的。

    這種復用可以在運行時間內(nèi)動態(tài)進行,新對象可以動態(tài)的引用與成分對象類型相同的對象。

    合成、聚合可以應用到任何環(huán)境中去,而繼承只能應用到一些有限環(huán)境中去。

    ?

    導致錯誤的使用合成、聚合與繼承的一個常見原因是錯誤的把“ Has-a ”關系當作“ Is-a ”關系。如果兩個類是“ Has-a ”關系那么應使用合成、聚合,如果是“ Is-a ”關系那么可使用繼承。

    ?

    迪米特法則

    ?

    迪米特法則說的是一個對象應該對其它對象有盡可能少的了解。即只與你直接的朋友通信,不要跟陌生人說話。如果需要和陌生人通話,而你的朋友與陌生人是朋友,那么可以將你對陌生人的調用由你的朋友轉發(fā),使得某人只知道朋友,不知道陌生人。換言之,某人會認為他所調用的是朋友的方法。

    以下條件稱為朋友的條件:

    當前對象本身。

    以參量的形式傳入到當前對象方法中的對象。

    當前對象的實例變量直接引用的對象。

    當前對象的實例變量如果是一個聚集,那么聚集中的元素也都是朋友。

    當前對象所創(chuàng)建的對象。

    任何一個對象,如果滿足上面的條件之一,就是當前對象的朋友,否則就是陌生人。

    迪米特法則的主要用意是控制信息的過載,在將其運用到系統(tǒng)設計中應注意以下幾點:

    在類的劃分上,應當創(chuàng)建有弱耦合的類。類之間的耦合越弱,就越有利于復用。

    在類的結構設計上,每一個類都應當盡量降低成員的訪問權限。一個類不應當 public 自己的屬性,而應當提供取值和賦值的方法讓外界間接訪問自己的屬性。

    在類的設計上,只要有可能,一個類應當設計成不變類。

    在對其它對象的引用上,一個類對其它對象的引用應該降到最低。

    posted on 2006-11-13 10:30 蘆葦 閱讀(183) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 97视频免费观看2区| 精品国产免费人成网站| 37pao成人国产永久免费视频| 亚洲AV午夜福利精品一区二区 | 亚洲熟妇无码另类久久久| free哆拍拍免费永久视频| 亚洲综合色成在线播放| 久久免费99精品国产自在现线 | 亚洲国产成人片在线观看无码 | caoporm超免费公开视频| 国产亚洲精品拍拍拍拍拍| 国产免费久久精品99久久| 好看的电影网站亚洲一区 | 一二三四影视在线看片免费| 2017亚洲男人天堂一| 黄网址在线永久免费观看 | 亚洲熟妇无码另类久久久| 男人都懂www深夜免费网站| 亚洲尹人九九大色香蕉网站 | 16女性下面无遮挡免费| 亚洲国产精品专区| 精品无码国产污污污免费| 日韩电影免费在线观看网址| 亚洲午夜国产精品无码| 亚洲国产精品免费在线观看| 久久久久久亚洲精品影院| 免费人成视频x8x8入口| 大地资源在线资源免费观看| 亚洲美女精品视频| 日韩高清免费观看| 中文字幕无线码中文字幕免费| 亚洲高清国产AV拍精品青青草原| 0588影视手机免费看片| 国产亚洲精品精品精品| 亚洲Av无码精品色午夜 | 亚洲A丁香五香天堂网| 久久99青青精品免费观看| 亚洲日韩一区二区三区| 亚洲人成图片小说网站| 久久久久久国产精品免费免费| 日韩在线视频播放免费视频完整版 |