1. 程式人生 > >面象對象設計6大原則之二:開放封閉原則

面象對象設計6大原則之二:開放封閉原則

bug www 反轉 對象 方法 接口 下層 一個 影響

定義

一個軟件的實體,包括類、方法、模塊、應該對擴展開放,對修改關閉。

也就是說一個軟件的實體應該通過擴展的方式來修改變化,而不是修改已有實體源代碼。

開放封閉原則也是最基本需要遵守的原則,我們應該盡量保證系統的穩定性,我們在實現另外一個功能的時候不能修改之前已有的代碼以免造成之前的功能出現BUG,帶來不必要的麻煩,所以開放封閉原則正是引導我們去設計一個穩定、方便擴展的系統。

在實際應用中我們一般會有以下幾種做法保證開放封閉原則:

1、抽象出一個接口或者抽象類,定義公共的方法,達到擴展的目的。實現接口和繼承抽象類還是有一些差別的,如果實現的接口,那麽如果還想在接口中添加新的契約,那麽實現這個接口的具體的類就要有各自分別的實現,如果實現了這個接口的類有很多,那麽修改起來是一件非常痛苦的事情,但是去繼承抽象類就不同了,在抽象類中定義一個virtual的方法,在繼承了這個抽象類的任何一個類中都可以直接使用,只在需要override的類中去搞就可以了。

2、參數類型和引用類型使用接口或者抽象類,不能依賴實現類。這個是控制反轉的一種做法(IOC),上層和下層不互相依賴,而是通過剝離出一個中間層(接口)來降低依賴,還是那句話,任何事情都可以通過新增一層來解決。

3、接口和抽象類不能修改,可以使用繼承接口或者抽象父類的形式達到擴展的目的。

這些應用看起來也並不復雜,無非是合理地定義接口和抽象類,不同的業務功能采用不同的實現類達到擴展,像設計模式中的策略模式、模板方式模式等都是開放封閉的原則。

總結一下,開放封閉原則具有以下幾個優點:

1、方便擴展,提高了可維護性。

2、不影響已有功能,提高了系統穩定性和減少了重復測試。

3、擴展之前的邏輯,提高了代碼復用性。



這個原文來自鏈接:http://www.jianshu.com/p/82be2076b0b5,我又添加了一些自己的理解,總之這個東西就是寫給我自己看的,方便以後查閱

面象對象設計6大原則之二:開放封閉原則