發表時間: 2008年01月14日
注:摘自《敏捷軟件開發:原則、模式與實踐》(Robert C. Martin)
遵循開放封閉原則設計出的模塊具有兩個主要的特征。
1、“對于擴展是開放的”(Open for extension)
這意味著模塊的行為是可以擴展的。當應用的需求改變時,我們可以對模塊進行擴展,使其具有滿足那些改變的新行為。換句話說,我們可以改變模塊的功能。
2、“對于更改是封閉的”(Closed for modification)
對模塊行為進行擴展時,不必改動模塊的源代碼或者二進制代碼。
OCP原則關鍵是抽象。
但對于應用程序中中的每個部分都肆意進行抽象不是一個好主意。正確的做法是,開發人員應該僅僅對程序中呈現出頻繁變化的那些部分作出抽象。拒絕不成熟的抽象和抽象本身一樣重要。
OCP背后的主要機制是抽象(abstraction)和多態(polymorphism)。在靜態類語言中,比如C++和Java,支持抽象和多態的關鍵機制之一是繼承(inheritance)。正是使用了繼承,我們才可以創建實現其基類(base class)中抽象方法的派生類。