溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Design Pattern設(shè)計(jì)原則有哪些

發(fā)布時(shí)間:2021-12-22 13:50:29 來(lái)源:億速云 閱讀:233 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)Design Pattern設(shè)計(jì)原則有哪些的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

Design Pattern 筆記

  1. 過(guò)于僵硬:不能輕松的加入新的功能

  2. 過(guò)于脆弱:修改一處可能波及到很多其他的地方

  3. 復(fù)用率低:現(xiàn)有的代碼依賴(lài)于其他的東西,想要重用這個(gè)代碼就很困難

  4. 黏度過(guò)高:改動(dòng)總是以破壞原始意圖和原始設(shè)計(jì)框架的方式進(jìn)行

設(shè)計(jì)原則

1、OCP原則(開(kāi)閉原則)

Software entities should be opon for extension but closed for modification.
對(duì)可變性的封裝:當(dāng)一個(gè)組件被認(rèn)為是可變的時(shí)候,應(yīng)該對(duì)這個(gè)可變性的組件進(jìn)行封裝,以便使其內(nèi)部的變化只作用在內(nèi)部范圍內(nèi),不會(huì)延伸到其他地方。
一個(gè)可變性的不同的表象就是同一個(gè)繼承結(jié)構(gòu)中的具體的子類(lèi)。在設(shè)計(jì)的時(shí)候不應(yīng)該把不同的可變性混合在一起。

2、里氏代換原則:
如果每個(gè)C1類(lèi)型的對(duì)象O1,都有一個(gè)C2類(lèi)型的對(duì)象O2,使得以C1定義的程序里面的O1都可以換成O2,那么就說(shuō)C2是C1的一個(gè)子類(lèi)。
里氏代換原則要求在使用基類(lèi)的地方其子類(lèi)也一定適用,這條原則是在進(jìn)行OOD時(shí)候?qū)?duì)象抽象過(guò)程中的一個(gè)驗(yàn)證方法。比若說(shuō)設(shè)計(jì)了一個(gè)超類(lèi)A,我們又設(shè)計(jì)了A的子類(lèi),那么檢查我們的設(shè)計(jì)是否合理,就應(yīng)該根據(jù)里氏代換原則,看看應(yīng)用代碼中使用到A的對(duì)象的地方,時(shí)候可以換成其子類(lèi)對(duì)象也同樣成立,如果不成立那么則證明子類(lèi)并不真正是超類(lèi)的孩子。

3、依賴(lài)倒轉(zhuǎn)關(guān)系:
通常在設(shè)計(jì)分層結(jié)構(gòu)的時(shí)候,我們總是設(shè)計(jì)成高層依賴(lài)于低層,而依賴(lài)倒轉(zhuǎn)的要求就是低層要依賴(lài)于高層,這里面簡(jiǎn)單的例子就是Java中的接口技術(shù),根據(jù)依賴(lài)倒轉(zhuǎn)關(guān)系原則,就有了針對(duì)接口編程概念:一個(gè)具體的Java類(lèi)應(yīng)該只實(shí)現(xiàn)其抽象類(lèi)和接口中的方法,而不是給出多余的方法。

4、抽象類(lèi)于接口:
a.抽象類(lèi)可實(shí)現(xiàn)部分功能,而接口不可以,所以抽象類(lèi)的子類(lèi)就擁有了抽象類(lèi)實(shí)現(xiàn)的那部分功能。
b.抽象類(lèi)的實(shí)現(xiàn)存在于其等級(jí)結(jié)構(gòu)中,而接口的實(shí)現(xiàn)不僅可以實(shí)現(xiàn)此接口,同時(shí)也可以實(shí)現(xiàn)其他接口。這樣這個(gè)子類(lèi)可以對(duì)外提供不同的服務(wù)。
c.如果在已有的子類(lèi),為其定義一個(gè)抽象的父類(lèi)是比較困難的,因?yàn)檫@會(huì)改變其等級(jí)結(jié)構(gòu),而為其定義一個(gè)接口卻是容易的。
d.接口是定義混合型類(lèi)型的理想工具。


5、ISP(接口分離原則):
這個(gè)原則強(qiáng)調(diào)的是如何來(lái)設(shè)計(jì)接口,它強(qiáng)調(diào)了應(yīng)該按角色來(lái)對(duì)接口劃分,而不應(yīng)該把所有角色的功能都?xì)w結(jié)到一個(gè)接口中去。它強(qiáng)調(diào)不要把很多接口作為優(yōu)化對(duì)象。
例如:有一個(gè)網(wǎng)站有一個(gè)全文搜索的功能,系統(tǒng)有一個(gè)Interface來(lái)提供所有的操作功能,比如說(shuō)管理索引,搜索操作等等。根據(jù)ISP原則應(yīng)該按角色劃分,對(duì)每一個(gè)角色都設(shè)計(jì)一個(gè)接口,如上例就應(yīng)該分別設(shè)計(jì)一個(gè)索引管理接口和搜索操作接口。
6、CARP合成/聚合復(fù)用原則:
7、LoD迪米特原則:也成為最少知識(shí)原則
如果一個(gè)類(lèi)不必與其他類(lèi)直接通信,那么兩個(gè)類(lèi)就不應(yīng)該相互作用,也就是說(shuō)彼此都不知道對(duì)方的存在。如果一個(gè)類(lèi)需要調(diào)用另外一個(gè)類(lèi)的方法,可以通過(guò)第三方來(lái)調(diào)用。
這個(gè)原則就是為了封閉組件的可變性,是它們的變化不會(huì)波及到其他地方。

感謝各位的閱讀!關(guān)于“Design Pattern設(shè)計(jì)原則有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI