1. 程式人生 > >OO設計原則 — The Open-Closed Principle:開放/封閉原則(OCP)

OO設計原則 — The Open-Closed Principle:開放/封閉原則(OCP)

對於一個軟體的實體(類,模組,函式等)應該是可以擴充套件的,但是不可被修改。

一、概要

開放/封閉原則(The Open-Closed Principle:OCP)是在面向物件設計中,類和模組等必須遵循以下規則:

 對於功能的擴充套件因該是開放的,即可以追加機能。

◇ 對於修改是封閉的,即既存的機能的實體是不可以修改的。

以上兩條規則就是說“軟體實體應當在不修改的前提下擴充套件”

開放/封閉原則(OCP)是面向物件設計的最基本的原則。也是之後的面向物件設計原則,

Package設計原則以及設計模式的基礎。

二、OCP的優點

 很好的擴充套件性。OCP的對於擴充套件的開發原則,當系統要擴充套件或者新增新的行為的時候

       只需要新增 另外實現的模組即可。

 提供軟體的安定性、穩定性。OCP的修改封閉原則,要在不修改既存程式碼的基礎上

       進行機能的追加,對原機能影響很小,確保了安全性,同時也保證了原有機能的穩定性。

 再利用性。根據OCP原則設計的類和模組,一般都是可以設計出可重用的機能的抽象和介面等。

      同時,軟體的各部分的耦合度也會很低,,使程式模組互換成為可能;

三、OCP實現的手法

實現OCP關鍵在於抽象,抽象出來的東西是不變的,具體的實現繼承於抽象,所以保證了對修改的Close,

而抽象的實現方式有多種,可以隨需新增,當然這也就是對擴充套件的Open。 另外要求的是技術包括,

多型 Polymorphism,介面 Interface,繼承 Inheritance. 一般的抽象步驟如下:

 分析機能。

 定義出不需要修改的可以被再利用的Interface。

 通過繼承Interface類,來實現機能的擴充套件和追加。

另外在對可變性進行封裝的時候也應該注意以下幾點:

 識別系統有可能變化的地方。 

 不要將一種可變形散佈在多處程式碼,而應該封裝起來。

 不要將一種可變性與另外一種可變性混在一起。  

 兩種安全的實現開閉原則的設計模式是:Strategy pattern(策略模式),

      Template Methord(模版方法模式)。

 依據開閉原則,我們儘量不要修改類,只擴充套件類,但在有些情況下會出現一些比較怪異的

       狀況,這時可以採用幾個類進行組合來完成。

 將可能發生變化的部分封裝成一個物件,如: 狀態, 訊息,,演算法,資料結構等等,

      封裝變化是實現"開閉原則"的一個重要手段,如經常發生變化的狀態值,如溫度,氣壓,顏色,積分,

     排名等等,可以將這些作為獨立的屬性,如果引數之間有關係,有必要進行抽象。

     對於行為,如果是基本不變的,則可以直接作為物件的方法,否則考慮抽象或者封裝這些行為。


但是,由於軟體的不確定性等原因,要想100%的按照OCP原則來進行軟體設計是很困難的,

所以,我們實際過程中應該是儘可能的遵守OCP原則,而不是一味必須所有的都要遵守。