軟件設(shè)計(jì)原則是比較抽象的概念薪贫,在設(shè)計(jì)模式中經(jīng)常體現(xiàn)初設(shè)計(jì)原則的概念艘狭,但是設(shè)計(jì)模式中也會(huì)有取舍,可能部分體現(xiàn)了囚霸,也可能完整的體現(xiàn)。設(shè)計(jì)原則更應(yīng)該表現(xiàn)為原則問題激才,在進(jìn)行設(shè)計(jì)時(shí)基于設(shè)計(jì)原則能幫助設(shè)計(jì)出更好的軟件設(shè)計(jì)拓型。
開閉原則
定義:一個(gè)良好的軟件包括類额嘿、模塊、函數(shù)應(yīng)該對(duì)修改關(guān)閉劣挫,對(duì)擴(kuò)展開放册养。通過抽象的設(shè)計(jì),提高軟件代碼的復(fù)用性 压固。
體現(xiàn):基于接口的設(shè)計(jì)球拦,派生滿足修改的實(shí)現(xiàn)類,將修改通過具體的實(shí)現(xiàn)完成擴(kuò)展帐我。
依賴倒置原則
定義:高層模塊不應(yīng)該依賴底層模塊坎炼,抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象拦键。面向接口編程而不應(yīng)該面向?qū)崿F(xiàn)編程谣光。用于減少代碼的耦合性,提高可維護(hù)性芬为,減少修改程序所帶來的風(fēng)險(xiǎn)萄金。
體現(xiàn):通過調(diào)用接口的方法,而不是具體的實(shí)現(xiàn)類來完成功能代碼媚朦。面向接口編程氧敢,而不是面向?qū)崿F(xiàn)編程。
單一職責(zé)原則
定義:類询张、函數(shù)孙乖、接口只應(yīng)負(fù)責(zé)一項(xiàng)職責(zé),理解為應(yīng)該僅有一個(gè)引起變化它的原因瑞侮。
體現(xiàn):做好功能的拆分的圆,減少耦合,實(shí)現(xiàn)職責(zé)隔離的代碼半火,
接口隔離原則
定義:接口的設(shè)計(jì)應(yīng)該細(xì)化越妈,實(shí)現(xiàn)根據(jù)需要來實(shí)現(xiàn)多個(gè)接口,通過小的接口實(shí)現(xiàn)接口間的隔離钮糖。提高代碼的可讀性梅掠、可維護(hù)性、可擴(kuò)展性店归。
體現(xiàn):約束接口的設(shè)計(jì)阎抒,高內(nèi)聚低耦合,只用需要的接口消痛,而不是一個(gè)膨大的接口且叁。
迪米特法則
定義:最少知道原則,類與類間的調(diào)用應(yīng)該只需要跟入?yún)⒅壬。鰠⒊汛蓡T變量做交互欺矫,而不需要對(duì)方法內(nèi)的變量做交互。降低了類之間的耦合度展氓,提高了模塊的相對(duì)獨(dú)立性穆趴。由于親合度降低,從而提高了類的可復(fù)用率和系統(tǒng)的擴(kuò)展性遇汞。
體現(xiàn):從依賴者的角度來說未妹,只依賴應(yīng)該依賴的對(duì)象。從被依賴者的角度說空入,只暴露應(yīng)該暴露的方法络它。
里氏替換原則
定義:繼承必須確保超類所擁有的性質(zhì)在子類中仍然成立。子類可以擴(kuò)展父類的功能执庐,但不能改變父類原有的功能
體現(xiàn):子類必須實(shí)現(xiàn)父類的抽象方法酪耕,但不得重寫(覆蓋)父類的非抽象方法。
子類中可以增加自己特有的方法轨淌。
當(dāng)子類覆蓋或?qū)崿F(xiàn)父類的方法時(shí)迂烁,方法的形參比父類方法的輸入?yún)?shù)更寬松。
當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時(shí)递鹉,方法的返回值要比父類更嚴(yán)格盟步。
合成復(fù)用原則
定義:盡量使用對(duì)象的組合、聚合來達(dá)到軟件復(fù)用的目的躏结。即has-a却盘,contains-a的關(guān)系。
體現(xiàn):通過傳入創(chuàng)建依賴對(duì)象實(shí)現(xiàn)組合的具體對(duì)象媳拴,而不是繼承來實(shí)現(xiàn)具體的對(duì)象黄橘。
總結(jié)
軟件設(shè)計(jì)最終想要實(shí)現(xiàn)的目的都是完成代碼的解耦,實(shí)現(xiàn)高內(nèi)聚低耦合屈溉,可擴(kuò)展塞关、可復(fù)用的軟件。