物件導向的設計原則一 開放 關閉原則

2021-08-30 03:12:28 字數 1357 閱讀 1607

動機

乙個設計良好的應用程式應該充分考慮到開發和維護階段需求的頻繁變化,通常情況下,新增乙個新的功能需要做出很多修改,我們應該使對已有**的修改最小化,因為他們已經經過了測試。對現有**做出修改將會以一種不可預料的方式影響它們的已有功能。

開放-關閉原則(以下簡稱開閉原則)

開-閉原則:

乙個軟體實體應該對擴充套件開發,對修改關閉。

開閉原則是說我們應該努力設計不需要修改的模組。在擴充套件系統的行為時,我們只需要新增新的**,而不需要修改已有的**。一般可以通過新增新的子類和重寫父類的方法來實現。

滿足開閉原則的模組符合下面兩個標準:

這兩個標準看似相互矛盾的,那麼我們怎麼實現他們呢?

怎樣實現開閉原則

要想使乙個軟體系統的所有模組都滿足開閉原則是不太現實的,不過我們應該努力使大部分模組滿足開閉原則。開閉原則是物件導向設計的核心,滿足該原則可以達到最大限度的復用和可維護性。

例項

考慮下面某個類的方法:

public double totalprice(part parts) 

public void setprice(double price)

public double getprice()

}// class concretepart implements a part for sale.

// pricing policy explicit here!

public class concretepart extends part

}

但是,現在如果**政策改變,我們必須修改part的子類,乙個更好的方法是建立乙個pricepolicy類,它可以為我們提供不同的**政策:

/**

* class pricepolicy implements a given price policy.

*/public class pricepolicy

public double getprice(double price)

}

使用這種方法,我們可以在執行時動態的設定part物件所引用的pricepoilcy物件,在實際的程式中,零件的**和相關的pricepolicy可以從資料庫中獲取。

總結

像許多其他原則一樣,開閉原則只是物件導向設計的乙個原則,實現乙個靈活的設計需要額外的時間和努力,引入新的抽象層會增加**的複雜性。因此,該原則適用於那些需求會經常發生變化的系統。有許多設計模式可以幫助我們擴充套件功能而不需要修改**。例如,裝飾模式等。

物件導向設計原則 開放關閉原則

在前天寫的bolg中裡面講了設計中的一些臭味,那什麼才是乙個好的設計!乙個好的系統設計應該具有如下的性質 可擴充套件性 靈活性 可插入性。1 可擴充套件性 extensibility 容易新增新的功能 2 靈活性 fiexibility 修改平穩地發生 3 可插入性 pluggability 容易將...

設計模式(一) 開放封閉原則

開放封閉原則 乙個軟體實體 如類 模組和函式 應該對擴充套件開放,對修改封閉。開放封閉原則指的是 既然需求一定會隨著時間發生變化,軟體只有適應變化。但是,較好的方式是通過擴充套件軟體實體的方式應對變化,而不是通過修改原有 來適應變化。開放封閉原則要求對修改關閉,但不做任何修改也是不可能的。當變化發生...

物件導向設計原則 開放封閉原則 OCP

顧 名思義,既開放又封閉,對擴充套件是開放的,對更改是封閉的!擴充套件即擴充套件現行的模組,當我們軟體的實際應用發生改變時,出現新的需求,就需要我們對模組進行擴充套件,使其能夠滿足新的需求!更改封閉即是在我們對模組進行擴充套件時,勿需對源有程式 和dll進行修改或重新編譯檔案!這個原則對我們在設計類...