軟體工程中的開放與封閉原則是乙個開發前的指南,當你進行工程開發時要依據這個原則。
開放封閉就是對擴充套件開放對修改封閉,目的是指導開發乙個當需求增加時,不需要修改原有**而進行**擴充套件即可實現。為什麼不去修改原**呢?
舉乙個badcase:
開發乙個庫,裡面定義了加法,使用者呼叫你這個庫實現了他的1+1的需求,這時候業務擴大了另乙個客戶需要加法的同時也希望能夠使用減法,作為乙個合格的開發產品,你不會說為這個公司再單獨開發乙個庫,首選當然是將原有庫進行修改,將其開發成乙個功能強大的產品,那麼問題來了,當你要加入減法的時候,你的第乙個只需要加法的客戶肯定不願意因為你的變化,他也要修改自己的**,他的產品好好的因為你要修改產品,相信我你會失去他的。那麼怎麼辦呢?當然是庫公升級的時候客戶a仍然可以在不改動**的情況下去使用庫,客戶b呢可以同時用你的庫去實現減法。
所以你的問題就來了,我們在開發只有加法功能的v1.0的時候就要考慮到將來可能存在的擴充套件,和在不影響原有使用的基礎上進行擴充套件,那麼你就要考慮**封閉那裡開放。這個過程你可以以各種sdk為物件想一下,當sdk或者各種語言api公升級的時候是如何做到,他們是怎麼保證老產品繼續工作而新產品可以使用新功能的。
看到這大概明白原理了,下面show me your code.
inte***ce
operate
客戶端:
class
kehusoperate
implements
operate
現在你要加乙個乘法,如果你在inte***ce裡面直接加上cheng();那麼客戶端**也必須加上cheng()這個方法才能工作。你強行客戶去公升級她的產品,他不會高興的。
應該怎麼做呢?
我想到兩種:
class
operate
class
newoperate
extends
operate
當需求變更時,讓老客戶去繼續使用operate,而新客戶使用新的類:
old客戶端
class
oldkehu
extends
operate
新客戶
class
newkehu
extends
newoperate
另一種方法是把所有的操作加減乘除都作為子類讓客戶選擇進行使用,當需要乙個開根號時,新加乙個開跟號類即可。
以上就是我所理解的開放封閉原則。
開放與封閉
近來國內許多公司都開始意識到,需要效仿世界領導性的公司,建立開放的生態系統。可是,為什麼要開放?又應該怎麼開放?這些都是大話題,值得深入 本期我們關注的是html5。有意思的是,html5的歷史恰恰提供了研究開放與創新的乙個絕佳案例。1997年w3c決定將html變身為一組xml標籤集,但xhtml...
開放與封閉原則
開放與封閉原則 open closed principle,ocp 軟體實體應用允許擴充套件,但禁止修改。當應用需求改變時,可以對其模組進行擴充套件,使其滿足需求變更的新行為。但對模組進行擴充套件時,不必改動該模組的源 後二進位制 擴充套件點 1 沒有擴充套件點的 如果乙個類沒有擴充套件點,那麼當這...
蘋果的封閉與開放
蘋果在上世紀80 90年代的失敗並不是因為封閉導致的!到今天看,當年走開放體系的pc廠商們大部分都沒有好下場,ibm賣了pc業務,gateway沒了,compaq沒了,hp和dell在苦苦掙扎。對比今天蘋果的mac業務持續增長和利潤率,你能說蘋果封閉是失敗的嗎?從漫長的30年歷史來看,走封閉路線的蘋...