??? 在編寫代碼的過程中钝吮,無(wú)論是多么封閉的模塊,都會(huì)存在一些無(wú)法對(duì)之封閉的變化。既然不可能完全封閉奇瘦,設(shè)計(jì)人員必須對(duì)于他設(shè)計(jì)的模塊應(yīng)該對(duì)哪種變化封閉做出選擇棘催。必須事先猜測(cè)出最有可能發(fā)生變化的種類,然后構(gòu)造抽象來(lái)隔離這些變化耳标。
??? 如果不使用開放—封閉原則醇坝,增加一個(gè)功能只是在client類中完成,那么后來(lái)再增加一個(gè)減法的算法次坡,那我們只能修改原來(lái)的這個(gè)類呼猪,如果每次修改都需要重新寫client算法類,這樣就會(huì)給我們帶來(lái)不必要的麻煩贸毕。如果我們?cè)谠O(shè)計(jì)之初就考慮增加一個(gè)抽象的運(yùn)算類郑叠,通過繼承和多態(tài)的方法來(lái)隔離具體的加減、乘除方法明棍,不僅可以滿足我們的業(yè)務(wù)需要乡革,還能在不改變client類的情況下增加功能,只需要增加相應(yīng)的子類就可以了摊腋。
? ? 開放—封閉原則是面向?qū)ο蟮暮诵乃诜邪妫浖?shí)體應(yīng)該是可擴(kuò)展,而不可修改的兴蒸。也就是說(shuō)视粮,對(duì)擴(kuò)展是開放的,而對(duì)修改是封閉的橙凳。因此蕾殴,開放封閉原則主要體現(xiàn)在兩個(gè)方面:對(duì)擴(kuò)展開放,意味著有新的需求或變化時(shí)岛啸,可以對(duì)現(xiàn)有代碼進(jìn)行擴(kuò)展钓觉,以適應(yīng)新的情況。對(duì)修改封閉坚踩,意味著類一旦設(shè)計(jì)完成荡灾,就可以獨(dú)立完成其工作,而不要對(duì)類進(jìn)行任何修改瞬铸。但是并不能對(duì)應(yīng)用程序中的每個(gè)部分都刻意抽象批幌,應(yīng)該拒絕不成熟的抽象。
???
???????????????????????????????????????????????????????????????????????????????? 依賴倒轉(zhuǎn)原則
??? 在編程時(shí)嗓节,我們的抽象類不應(yīng)該依賴于細(xì)節(jié)荧缘,細(xì)節(jié)應(yīng)該依賴于抽象。我們應(yīng)該針對(duì)于接口編程拦宣,而不是針對(duì)于實(shí)現(xiàn)編程胜宇。這個(gè)意思可能是說(shuō)耀怜,我們?cè)趯?shí)現(xiàn)功能的時(shí)候,功能可以隨意的改變桐愉,如果我們只注重細(xì)節(jié)财破,在修改的時(shí)候就顯得更麻煩。如果我們針對(duì)于接口編程从诲,我們只需要改變我們的實(shí)現(xiàn)類左痢,或者在子類中實(shí)現(xiàn)我們想要的功能,這樣就提高了可維護(hù)性系洛。
??????????????????????????????????????????????????????????????????????????????????????? 里氏代換原則
??? 里氏替換原則(Liskov Substitution Principle LSP)面向?qū)ο笤O(shè)計(jì)的基本原則之一俊性。 里氏替換原則中說(shuō),任何基類可以出現(xiàn)的地方描扯,子類一定可以出現(xiàn)定页。只有當(dāng)子類可以替換掉父類,軟件單位的功能才能不受影響時(shí)绽诚,父類才能真正的被復(fù)用典徊,而子類也能夠在父類的基礎(chǔ)上增加新的方法。
??? 由于子類的可替換性恩够,才使得父類模塊在無(wú)需修改的情況下就可以拓展卒落。