軟件設計模式筆記

  軟件設計模式筆記

1. 面向對象五大原則

A.開放封閉原則,它是面向對象所有原則的核心,軟件設計說到底追求的目標就是封裝變化、降低耦合,而開放封閉原則就是這一目標的最直接體現。 開放封閉原則,其核心思想是:軟件實體應該是可擴展的,而不可修改的。也就是,對擴展開放,對修改封閉的。

B. 單一職責原則,其核心思想爲:一個類,最好只做一件事,只有一個引起它的變化。單一職責原則可以看做是低耦合、高內聚在面向對象原則上的引申,將職責定義爲引起變化的原因,以提高內聚性來減少引起變化的原因。

C. 依賴倒置原則,其核心思想是:依賴於抽象。具體而言就是高層模塊不依賴於底層模塊,二者都同依賴於抽象;抽象不依賴於具體,具體依賴於抽象。

D. 接口隔離原則,其核心思想是:使用多個小的專門的接口,而不要使用一個大的總接口。具體而言,接口隔離原則體現在:接口應該是內聚的,應該避免“胖”接口。一個類對另外一個類的依賴應該建立在最小的接口上,不要強迫依賴不用的方法,這是一種接口污染。

E. Liskov替換原則,其核心思想是:子類必須能夠替換其基類。這一思想體現爲對繼承機制的約束規範,只有子類能夠替換基類時,才能保證系統在運行期內識別子類,這是保證繼承複用的基礎。Liskov替換原則是關於繼承機制的設計原則,Liskov替換原則能夠保證系統具有良好的拓展性,同時實現基於多態的抽象機制,能夠減少代碼冗餘,避免運行期的類型判別。

 


2. 類的五種關係

依賴關係(Dependency)---關聯關係(Association)---聚合(Aggregation)---組合(Composition)---泛化(Generalization)

1. 依賴關係是五種關係中耦合最小的一種關係。使用虛線加箭頭表示。(A類中實例化另外B類的對象,A--->B)

2. 關聯關係是實線加箭頭表示,表示類之間的關係比依賴要強。(A類的對象作爲B類的內部屬性,A->B)

3. 聚合關係通過一個空心的菱形加箭頭表示。(A類離開B類不會被銷燬)

4. 組合關係通過實心的菱形加箭頭表示(A類離開B類會被銷燬)

5. 泛化通過實線加空心箭頭表示(A類繼承B類或者實現B接口)


3. 橋接模式

A. 橋接模式(Bridge Pattern):將抽象部分與它的實現部分分離,使它們都可以獨立地變化。它是一種對象結構型模式,又稱爲柄體(Handle and Body)模式或接口(Interface)模式。(橋接模式的用意是“將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化”。)

B. 優點----1.橋接模式提高了系統的可擴充性。2.實現細節對客戶透明,可以對用戶隱藏實現細節。3.分離接口及其實現部分。橋接模式使用“對象間的組合關係”解耦了抽象和實現之間固有的綁定關係,使得抽象和實現可以沿着各自的維度來變化。 所謂抽象和實現沿着各自維度的變化,即“子類化”它們,得到各個子類之後,從而獲得不同平臺上的不同型號。

C. 使用的情況---1.如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性, 避免在兩個層次之間建立靜態的聯繫。2.設計要求實現化角色的任何改變不應當影響客戶端,或者說實現化角色的改變對客戶端是完全透明的。3.一個構件有多於一個的抽象化角色和實現化角色,系統需要它們之間進行動態耦合。4.雖然在系統中使用繼承是沒有問題的,但是由於抽象化角色和具體化角色需要獨立變化,設計要求需要獨立管理這兩者。

D. 模型應用---java虛擬機


:  在橋接模式中不僅Implementor具有變化(ConcreateImplementior),而且Abstraction也可以發生變化(RefinedAbstraction),這是一個多對多的關係,而且兩者的變化是完全獨立的。RefinedAbstractionConcreateImplementior之間鬆散耦合,它們僅僅通過AbstractionImplementor之間的聚合關係聯繫起來。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章