??? 在編寫代碼的過程中,無論是多么封閉的模塊,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設(shè)計(jì)人員必須對于他設(shè)計(jì)的模塊應(yīng)該對哪種變化封閉做出選擇。必須事先猜測出最有可能發(fā)生變化的種類,然后構(gòu)造抽象來隔離這些變化。

??? 如果不使用開放—封閉原則,增加一個功能只是在client類中完成,那么后來再增加一個減法的算法,那我們只能修改原來的這個類,如果每次修改都需要重新寫client算法類,這樣就會給我們帶來不必要的麻煩。如果我們在設(shè)計(jì)之初就考慮增加一個抽象的運(yùn)算類,通過繼承和多態(tài)的方法來隔離具體的加減、乘除方法,不僅可以滿足我們的業(yè)務(wù)需要,還能在不改變client類的情況下增加功能,只需要增加相應(yīng)的子類就可以了。
? ? 開放—封閉原則是面向?qū)ο蟮暮诵乃?,軟件?shí)體應(yīng)該是可擴(kuò)展,而不可修改的。也就是說,對擴(kuò)展是開放的,而對修改是封閉的。因此,開放封閉原則主要體現(xiàn)在兩個方面:對擴(kuò)展開放,意味著有新的需求或變化時,可以對現(xiàn)有代碼進(jìn)行擴(kuò)展,以適應(yīng)新的情況。對修改封閉,意味著類一旦設(shè)計(jì)完成,就可以獨(dú)立完成其工作,而不要對類進(jìn)行任何修改。但是并不能對應(yīng)用程序中的每個部分都刻意抽象,應(yīng)該拒絕不成熟的抽象。
???
???????????????????????????????????????????????????????????????????????????????? 依賴倒轉(zhuǎn)原則

??? 在編程時,我們的抽象類不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。我們應(yīng)該針對于接口編程,而不是針對于實(shí)現(xiàn)編程。這個意思可能是說,我們在實(shí)現(xiàn)功能的時候,功能可以隨意的改變,如果我們只注重細(xì)節(jié),在修改的時候就顯得更麻煩。如果我們針對于接口編程,我們只需要改變我們的實(shí)現(xiàn)類,或者在子類中實(shí)現(xiàn)我們想要的功能,這樣就提高了可維護(hù)性。

??????????????????????????????????????????????????????????????????????????????????????? 里氏代換原則
??? 里氏替換原則(Liskov Substitution Principle LSP)面向?qū)ο笤O(shè)計(jì)的基本原則之一。 里氏替換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。只有當(dāng)子類可以替換掉父類,軟件單位的功能才能不受影響時,父類才能真正的被復(fù)用,而子類也能夠在父類的基礎(chǔ)上增加新的方法。

??? 由于子類的可替換性,才使得父類模塊在無需修改的情況下就可以拓展。