一、概念編程
開放封閉原則(OCP,Open Closed Principle):軟件實體應該是可擴展,而不可修改的;也就是說,對擴展是開放的,而對修改是封閉的。設計模式
OCP主要體如今兩個方面:spa
(1)對擴展開放,意味着有新的需求或變化時,能夠對現有代碼進行擴展以適應新的狀況。設計
(2)對修改封閉,意味着類一旦設計完成,就能夠獨立完成其工做而不要對類進行任何修改對象
抽象編程blog
對於軟件設計者來講,必須在不須要對原有的系統進行修改的狀況下,實現靈活的系統擴展,如何作到呢?只有依賴於抽象。實現開放封閉的核心思想就是對抽象編程,而不是具體編程,由於抽象相對穩定。讓類依賴於固定的抽象,對修改就是封閉的;經過面向對象的繼承和多態,能夠實現對抽象體的繼承,經過覆寫其方法來改變固有行爲,實現新的擴展方法。繼承
2、案例
接口
銀行對外提供了存款、轉帳和取款等業務,銀行的業務人員不管給哪位客戶辦理業務都有可能設計到全部的業務,以下所示:ip
經過上圖,咱們能夠看出:每一個BankStaff針對不一樣的客戶要求須要選擇不一樣的操做流程,這種被動式的選擇形成了大量的時間浪費,增長了出錯的概率。有新的業務增長時,咱們都須要修改BankProcess類,同時在BankStaff中增長對業務類型的判斷。銀行業務封裝在一個類中,違反了單一職責原則;有新的業務需求時,必須修改原來的代碼,違反了開放封閉原則。ci
經過抽象解決問題。將業務功能抽象爲接口,當業務員依賴於固定的抽象時,對於修改就是封閉的;而經過繼承和多態,從抽象類派生出新的擴展實現,就是對擴展開放。以下:
這裏只是簡單的說明,更詳細的須要在設計模式中體現。經過開放封閉原則,能夠有效的下降實體與實體之間的耦合性;將容易變化的因素進行抽象處理,能夠改善類的內聚性。