一樊卓、設(shè)計(jì)模式原則
按五大原則劃分:1、2杠河、3和4(算一種)茧彤、5和6(算一種)电爹、7
按六大原則劃分:1、2、3闸英、4走敌、5和6(算一種)统求、7
按七大原則劃分:1害淤、2、3卑雁、4募书、5、6测蹲、7
1莹捡、單一職責(zé)原則(Single Responsibility Principle,SRP)
就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因扣甲。類的職責(zé)要單一篮赢,不能將太多的職責(zé)放在一個(gè)類中。(高內(nèi)聚琉挖、低耦合)
2启泣、開(kāi)閉原則(Open Close Principle)
開(kāi)閉原則就是說(shuō)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉(Open for extension示辈;Closed for modification)种远。在程序需要進(jìn)行拓展的時(shí)候,不能去修改原有的代碼顽耳,實(shí)現(xiàn)一個(gè)熱插拔的效果。所以一句話概括就是:為了使程序的擴(kuò)展性好妙同,易于維護(hù)和升級(jí)射富。想要達(dá)到這樣的效果,我們需要使用接口和抽象類粥帚。
3胰耗、里氏代換原則(Liskov Substitution Principle)
里氏代換原則中說(shuō),任何基類可以出現(xiàn)的地方芒涡,子類一定可以出現(xiàn)柴灯。 簡(jiǎn)單來(lái)說(shuō)就是子類型能替代父類型卖漫。
LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類赠群,軟件單位的功能不受到影響時(shí)羊始,基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為查描。里
氏代換原則是對(duì)“開(kāi)-閉”原則的補(bǔ)充突委。實(shí)現(xiàn)“開(kāi)-閉”原則的關(guān)鍵步驟就是抽象化。而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn)冬三,所以里氏代換原則是對(duì)實(shí)現(xiàn)
抽象化的具體步驟的規(guī)范匀油。
4、依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)
這個(gè)是開(kāi)閉原則的基礎(chǔ)勾笆,具體內(nèi)容:針對(duì)接口編程敌蚜,依賴于抽象而不依賴于具體。
5窝爪、接口隔離原則(Interface Segregation Principle)
這個(gè)原則的意思是:使用多個(gè)隔離的接口弛车,比使用單個(gè)接口要好。還是一個(gè)降低類之間的耦合度的意思酸舍,從這兒我們看出帅韧,其實(shí)設(shè)計(jì)模式就是一個(gè)軟件的設(shè)計(jì)思想,從大型軟件架構(gòu)出發(fā)啃勉,為了升級(jí)和維護(hù)方便忽舟。所以上文中多次出現(xiàn):降低依賴,降低耦合淮阐。
6叮阅、迪米特法則(最少知道原則)(Demeter Principle)
為什么叫最少知道原則,就是說(shuō):一個(gè)實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生相互作用泣特,使得系統(tǒng)功能模塊相對(duì)獨(dú)立浩姥。
7、合成復(fù)用原則(Composite Reuse Principle)
原則是盡量使用合成/聚合的方式状您,而不是使用繼承勒叠。
二、注意事項(xiàng)
-
單一職責(zé)原則:
發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離膏孟。如果你能想到多于一個(gè)的動(dòng)機(jī)去改變這個(gè)類眯分,那么這個(gè)類就是有多于一個(gè)的職責(zé)。例如:界面繪制和業(yè)務(wù)邏輯是兩種職責(zé)柒桑。
-
開(kāi)閉原則:
絕對(duì)的對(duì)修改關(guān)閉是不可能的弊决。無(wú)論模塊多么封閉,都存在一些無(wú)法對(duì)之封閉的變化魁淳。因此飘诗,設(shè)計(jì)人員必須對(duì)于他設(shè)計(jì)的模塊應(yīng)該應(yīng)對(duì)哪種變化封閉做出選擇与倡。他必須猜測(cè)出最有可能發(fā)生的變化種類,然后構(gòu)造抽象來(lái)隔離那些變化昆稿。然而對(duì)于應(yīng)用程序中的每個(gè)部分都進(jìn)行刻意地進(jìn)行抽象同樣不是一個(gè)好主意纺座。拒絕不成熟的抽象和抽象本身一樣重要。過(guò)猶不及貌嫡。
-
里氏替換原則:
子類型必須能夠替代父類型比驻。
正是有了這個(gè)原則,繼承復(fù)用才有了可能岛抄,子類能替換父類别惦,而軟件單位的功能不受到影響,父類才能被真正復(fù)用夫椭,子類才能在父類無(wú)需修改的情況下進(jìn)行擴(kuò)展掸掸。
-
依賴倒轉(zhuǎn)原則:
針對(duì)接口編程,不要對(duì)實(shí)現(xiàn)編程蹭秋。依賴倒轉(zhuǎn)就是誰(shuí)也不依賴誰(shuí)扰付,除了約定的接口,大家都靈活自如仁讨。
-
迪米特原則:
強(qiáng)調(diào)了類之間的松耦合羽莺。在類的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類都應(yīng)當(dāng)精盡量降低成員的訪問(wèn)權(quán)限洞豁,不該暴露的字段和行為就不要公開(kāi)盐固。(封裝的思想)