設計模式學習(四)

2021-10-08 19:39:27 字數 1274 閱讀 4622

開閉原則是指乙個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。也就是說乙個軟體實體應該通過擴充套件來實現變化,而不是通過修改已有的**來實現變化。我們以書店銷售書籍為例來說明什麼是開閉原則。

其類圖如下:

書籍及其實現類**如下:

書店類**:

專案開發完了,開始正常賣書了。假如到了雙十一,要搞打折活動,上面的功能是不支援的,所以需要修改程式。有三種方法可以解決這個問題:

(1)修改介面

在ibook介面裡新增getoffprice()方法,專門用於進行打折,所有的實現類都實現該方法。但這樣修改的後果就是,實現類novelbook要修改,書店類bookstore中的main方法也要修改,同時,ibook作為介面應該是穩定且可靠的,不應該經常發生變化,因此,該方案被否定。

(2)修改實現類

修改novelbook類中的方法,直接在getprice()方法中實現打折處理,這個方法可以是可以,但如果採購書籍的人員要看**怎麼辦,由於該方法已經進行了打折處理,因此採購人員看到的也是打折後的**,會因資訊不對稱出現決策失誤的情況。因此,該方案也不是乙個最優的方案。

(3)通過擴充套件實現變化

增加乙個子類offnovelbook,覆寫getprice方法,高層次的模組(也就是bookstore中static靜態塊中)通過offnovelbook類產生新的物件,完成業務變化對系統的最小開發。這樣修改也少,風險也小,修改後的類圖如下:

為什麼要用開閉原則

1. 開閉原則非常著名,只要是做物件導向程式設計的,在開發時都會提及開閉原則。

2. 開閉原則是最基礎的乙個原則,前面介紹的5個原則都是開閉原則的具體形態,而開閉原則才是其精神領袖。

3. 開閉原則提高了復用性,以及可維護性。

設計模式學習四 狀態模式

一 什麼是狀態模式 定義 允許物件在內部狀態改變時改變它的行為,物件看起來好像改變了它的類 二 什麼時候用狀態模式?當控制乙個物件狀態轉換的條件表示式過於複雜時,使用狀態模式。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。避免了寫很多的if。else 三 狀態模式構成 c...

設計模式學習(四) Decorator

之前我們已經學習完了三個 元件協作 模式,接下來我們將進行 單一職責 模式的學習。單一職責 模式 在軟體元件的設計中,如果責任劃分的不清晰,使用繼承得到的結果往往是隨著需求的變化,子類急劇膨脹,同時充斥著重複的 這時候的關鍵是劃清責任。單一職責 模式的典型模式包括decorator和bridge模式...

JavaScript設計模式學習記錄(四)

1.外觀模式 個人感覺就是封裝監聽方法,使之相容各個瀏覽器,所以外觀模式其實就是封裝方法?不知道我理解的對不對 外觀模式實現 function addevent dom,type,fn else if dom.attachevent else 呼叫 var myinput document.gete...