1. 程式人生 > >面向物件設計原則 開放封閉原則(Open Closed Principle)

面向物件設計原則 開放封閉原則(Open Closed Principle)

開放封閉原則(OCP,Open Closed Principle)是所有面向物件原則的核心。

 

軟體設計本身所追求的目標就是封裝變化、降低耦合,而開放封閉原則正是對這一目標的最直接體現。

其他的設計原則,很多時候是為實現這一目標服務的,例如以里氏替換原則實現最佳的、正確的繼承層次,就能保證不會違反開放封閉原則。

 

關於開放封閉原則,其核心的思想是:

軟體實體應該是可擴充套件,而不可修改的。也就是說,對擴充套件是開放的,而對修改是封閉的。

因此,開放封閉原則主要體現在兩個方面:

對擴充套件開放,意味著有新的需求或變化時,可以對現有程式碼進行擴充套件,以適應新的情況。

對修改封閉,意味著類一旦設計完成,就可以獨立完成其工作,而不要對類進行任何修改。

 

相信工作過一段時間的程式設計師都明白 “需求總是變化”、“世界上沒有一個軟體是不變的”,這些言論是對軟體需求最經典的表白。

從中透射出一個關鍵的意思就是,對於軟體設計者來說,必須在不需要對原有的系統進行修改的情況下,實現靈活的系統擴充套件。而如何能做到這一點呢?

只有依賴於抽象。實現開放封閉的核心思想就是對抽象程式設計,而不對具體程式設計,因為抽象相對穩定。

讓類依賴於固定的抽象,所以對修改就是封閉的;

而通過面向物件的繼承和對多型機制,可以實現對抽象體的繼承,通過覆寫其方法來改變固有行為,實現新的擴充套件方法,所以對於擴充套件就是開放的。

 

這是實施開放封閉原則的基本思路,

同時這種機制是建立在兩個基本的設計原則的基礎上,這就是里氏替換原則和合成/聚合複用原則。

對於違反這一原則的類,必須進行重構來改善,常用於實現的設計模式主要有Template Method模式和Strategy模式。

而封裝變化,是實現這一原則的重要手段,將經常發生變化的狀態封裝為一個類。