《JAVA與模式》讀書筆記(2)

4 “開-閉”原則(Open-Closed Principle/OCP

 

一個軟件實體應當對擴展開放,對修改關閉。

Software entities should be open for extension,but closed for modification.

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

滿足“開-閉”原則的設計可以給一個軟件系統兩個無可比擬的優越性:

l         通過擴展已有的軟件系統,可以提供新的行爲,以滿足對軟件的新需求,使變化中的軟件系統有一定的適應性和靈活性。

l         已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的軟件系統有一定的穩定性和延續性。

里氏代換原則:任何基類可以出現的地方,子類一定可以出現。

依賴倒轉原則:要依賴於抽象,不要依賴於實現。

合成/聚合複用原則:要儘量使用合成/聚合,而不是繼承關係達到複用的目的。

迪米特法則:一個軟件實體應當與儘可能少的其他實體發生相互作用。

接口隔離原則:應當爲客戶端提供儘可能小的單獨的接口,而不要提供大的總接口。

策略模式:如果有一組算法,那麼就將每一個算法封裝起來,使得它們可以互換。

 

5 專題:JAVA語言的接口

      

       Java語言中,Java接口可以定義public的常量,可以有publicstaticfinal的屬性。

       Java編譯器檢查方法的置換(Overrride)時,會進一步檢查兩個方法的返還類型和拋出的異常是否相同。

接口代表一個角色(role),實現這個接口的類便是扮演這個角色的演員。一個角色可以由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,並不要求有任何其他的共同之處。

       應當使用Java接口和抽象Java類而不是具體類進行變量的類型聲明、參量的類型聲明、方法的返還類型聲明,以及數據類型的轉換等。當然,一個更好的做法是僅僅使用Java接口,而不要使用抽象Java類來做到上面這些。

       Java接口的常見用法:

       單方法接口:一個單方法接口只含有一個方法。如:Runnable接口

       標識接口:沒有任何方法和屬性的接口。如:java.io.Serializablejava.rmi.Remote

       常量接口:用java接口來聲明一些常量,然後由實現這個接口的類使用這些常量。(這種方法是錯誤的)

 

6 專題:抽象類

 

具體類不是用來繼承的。只要有可能,不要從具體類繼承。

       在一個以繼承關係形成的等級結構裏面,樹葉節點均應當是具體類,而樹枝節點均應當是抽象類(或者Java接口)。這樣的設計是所有的Java設計師都應當努力做到的。

       在一個從抽象類到多個具體類的繼承關係中,共同的代碼應當儘量移動到抽象類裏,可以提高代碼的複用率。

       抽象類應當擁有儘可能少的數據。

       只有當以下的Coad條件全部被滿足時,才應當使用繼承關係:

(1)       子類是超類的一個特殊種類,而不是超類的一個角色,也就是要區分“Has-A”與“Is-A”兩種關係的不同。

(2)       永遠不會出現需要將子類換成另一個類的子類的情況。

(3)       子類具有擴展超類的責任,而不是具有置換掉(Override)或註銷掉(Nullify)超類的責任。

只有在分類學角度上有意義裏,纔可以使用繼承,不要從工具類繼承。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章