溫馨提示×

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

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

Java中GOF23的作用是什么

發(fā)布時(shí)間:2021-07-29 16:56:10 來(lái)源:億速云 閱讀:185 作者:Leah 欄目:開發(fā)技術(shù)

Java中GOF23的作用是什么,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

一、什么是設(shè)計(jì)模式

設(shè)計(jì)模式(Design pattern) 是解決軟件開發(fā)某些特定問(wèn)題而提出的一些解決方案也可以理解成解決問(wèn)題的一些思路。通過(guò)設(shè)計(jì)模式可以幫助我們?cè)鰪?qiáng)代碼的可重用性、可擴(kuò)充性、 可維護(hù)性、靈活性好。我們使用設(shè)計(jì)模式最終的目的是實(shí)現(xiàn)代碼的高內(nèi)聚和低耦合。

二、設(shè)計(jì)模式的三大分類及關(guān)鍵點(diǎn)

Java中GOF23的作用是什么

1、創(chuàng)建型模式

對(duì)象實(shí)例化的模式,創(chuàng)建型模式用于解耦對(duì)象的實(shí)例化過(guò)程。

單例模式:某個(gè)類智能有一個(gè)實(shí)例,提供一個(gè)全局的訪問(wèn)點(diǎn)。工廠模式:一個(gè)工廠類根據(jù)傳入的參量決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。抽象工廠模式:創(chuàng)建相關(guān)或依賴對(duì)象的家族,而無(wú)需明確指定具體類。建造者模式:封裝一個(gè)復(fù)雜對(duì)象的創(chuàng)建過(guò)程,并可以按步驟構(gòu)造。原型模式:通過(guò)復(fù)制現(xiàn)有的實(shí)例來(lái)創(chuàng)建新的實(shí)例。 2、結(jié)構(gòu)型模式

把類或?qū)ο蠼Y(jié)合在一起形成一個(gè)更大的結(jié)構(gòu)。

裝飾器模式:動(dòng)態(tài)的給對(duì)象添加新的功能。代理模式:為其它對(duì)象提供一個(gè)代理以便控制這個(gè)對(duì)象的訪問(wèn)。橋接模式:將抽象部分和它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化。適配器模式:將一個(gè)類的方法接口轉(zhuǎn)換成客戶希望的另一個(gè)接口。組合模式:將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。外觀模式:對(duì)外提供一個(gè)統(tǒng)一的方法,來(lái)訪問(wèn)子系統(tǒng)中的一群接口。享元模式:通過(guò)共享技術(shù)來(lái)有效的支持大量細(xì)粒度的對(duì)象。 3、行為型模式

類和對(duì)象如何交互,及劃分責(zé)任和算法。

策略模式:定義一系列算法,把他們封裝起來(lái),并且使它們可以相互替換。模板模式:定義一個(gè)算法結(jié)構(gòu),而將一些步驟延遲到子類實(shí)現(xiàn)。命令模式:將命令請(qǐng)求封裝為一個(gè)對(duì)象,使得可以用不同的請(qǐng)求來(lái)進(jìn)行參數(shù)化。迭代器模式:一種遍歷訪問(wèn)聚合對(duì)象中各個(gè)元素的方法,不暴露該對(duì)象的內(nèi)部結(jié)構(gòu)。觀察者模式:對(duì)象間的一對(duì)多的依賴關(guān)系。仲裁者模式:用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。備忘錄模式:在不破壞封裝的前提下,保持對(duì)象的內(nèi)部狀態(tài)。解釋器模式:給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解釋器。狀態(tài)模式:允許一個(gè)對(duì)象在其對(duì)象內(nèi)部狀態(tài)改變時(shí)改變它的行為。責(zé)任鏈模式:將請(qǐng)求的發(fā)送者和接收者解耦,使的多個(gè)對(duì)象都有處理這個(gè)請(qǐng)求的機(jī)會(huì)。訪問(wèn)者模式:不改變數(shù)據(jù)結(jié)構(gòu)的前提下,增加作用于一組對(duì)象元素的新功能。

三、設(shè)計(jì)模式的幾種原則

1、單一職責(zé)原則

對(duì)于一個(gè)類,只有一個(gè)引起該類變化的原因;該類的職責(zé)是唯一的,且這個(gè)職責(zé)是唯一引起其他類變化的原因。

2、接口隔離原則

客戶端不應(yīng)該依賴它不需要的接口,一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。

3、依賴倒轉(zhuǎn)原則

依賴倒轉(zhuǎn)原則是程序要依賴于抽象接口,不要依賴于具體實(shí)現(xiàn)。簡(jiǎn)單的說(shuō)就是要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程,這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合。

4、里式代換原則

任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。里氏代換原則是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換基類,軟件單位的功能不受影響時(shí),基類才能真正的被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。里氏代換原則是對(duì)開閉原則的補(bǔ)充。實(shí)現(xiàn)開閉原則的關(guān)鍵步驟就是抽象化。而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。

5、開閉原則

(1)對(duì)于擴(kuò)展是開放的(Open for extension)。這意味著模塊的行為是可以擴(kuò)展的。當(dāng)應(yīng)用的需求改變時(shí),我們可以對(duì)模塊進(jìn)行擴(kuò)展,使其具有滿足那些改變的新行為。也就是說(shuō),我們可以改變模塊的功能。

(2)對(duì)于修改是關(guān)閉的(Closed for modification)。對(duì)模塊行為進(jìn)行擴(kuò)展時(shí),不必改動(dòng)模塊的源代碼或者二進(jìn)制代碼。模塊的二進(jìn)制可執(zhí)行版本,無(wú)論是可鏈接的庫(kù)、DLL或者.EXE文件,都無(wú)需改動(dòng)。

6、迪米特法則

迪米特法則又叫做最少知識(shí)原則,就是說(shuō)一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其它對(duì)象又盡可能少的了解,不和陌生人說(shuō)話。

7、合成復(fù)用原則

合成復(fù)用原則要求在軟件復(fù)用時(shí),要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn),其次才考慮使用繼承關(guān)系來(lái)實(shí)現(xiàn)。如果要使用繼承關(guān)系,則必須嚴(yán)格遵循里氏替換原則。合成復(fù)用原則同里氏替換原則相輔相成的,兩者都是開閉原則的具體實(shí)現(xiàn)規(guī)范。

設(shè)計(jì)模式七大原則總結(jié)(超詳細(xì))

四、設(shè)計(jì)模式關(guān)系

Java中GOF23的作用是什么

五、設(shè)計(jì)模式感想

一共有23種設(shè)計(jì)模式,可以說(shuō)都是為了提高代碼的可讀性、可擴(kuò)展性、可復(fù)用性、類的可替換性、組件化、可移植性等等特性。通過(guò)接口、抽象類、繼承、實(shí)現(xiàn)、委托、抽象、面向接口編程、多態(tài)、重載、重寫等方式使得代碼的這些特性得以彰顯,可以說(shuō)只有深刻的理解了這些概念背后的哲學(xué)思想才能更好的理解設(shè)計(jì)模式。在設(shè)計(jì)模式中有很多思想,比如可以使用委托的不要使用繼承、開閉原則,面向擴(kuò)展開放,面向修改關(guān)閉,里式代換原則,父類一定能被子類代替并使用,反置則不然,面向接口編程,功能層次和實(shí)現(xiàn)層次分離(橋接模式)、高內(nèi)聚低耦合等思想,這些思想都是寶貴的,正是因?yàn)檫@樣的思想的存在才使得代碼的更新?lián)Q代的時(shí)候能夠盡可能少的甚至不用修改之前的代碼,直接加入新的內(nèi)容。提高軟件的開發(fā)周期,便于維護(hù)和升級(jí),便于查找和糾錯(cuò),易于擴(kuò)展和使用。

同樣的設(shè)計(jì)模式主要分為三大類,創(chuàng)建型、行為型、結(jié)構(gòu)型。我們可以簡(jiǎn)單的這樣分類,只不過(guò)這樣的分類似乎并不準(zhǔn)確,不能一語(yǔ)道出所有的本質(zhì),設(shè)計(jì)模式是相互關(guān)聯(lián)的,有的設(shè)計(jì)模式內(nèi)部其實(shí)是使用了別的設(shè)計(jì)模式作為支撐的,但是大體上這樣的一種劃分便于我們?nèi)ビ洃洠瑑H此而已。

六、設(shè)計(jì)模式回顧

從迭代器開始,我們將類中數(shù)據(jù)結(jié)構(gòu)的遍歷和類的功能實(shí)現(xiàn)分離出來(lái),本質(zhì)上使用了工廠模式;

其次我們學(xué)習(xí)了適配器模式,它將不同的接口進(jìn)行適配,從而便于版本的兼容性以及其他功能;

然后我們學(xué)習(xí)了模板方法,使用模板面向抽象編程,便于新的子類的實(shí)現(xiàn)和管理;

之后學(xué)習(xí)了工廠模式,其實(shí)借用了模板模式來(lái)創(chuàng)建產(chǎn)品,是一種非常重要用處很廣的一種方法;

然后我們學(xué)習(xí)了單例模式,有懶漢式、餓漢式等,生成關(guān)于某個(gè)類全局唯一的對(duì)象,注意多線程的影響;

之后是原型模式,用來(lái)復(fù)制復(fù)雜的對(duì)象,使用了clone方法,然后是builder模式,用一個(gè)新的類對(duì)已有的抽象接口進(jìn)行整合和編程,從而構(gòu)建出我們想要的東西;

然后是抽象工廠模式,使用了工廠模式,組合模式等模式,面向抽象編程,將抽象零件組裝成抽象產(chǎn)品,便于具體工廠的創(chuàng)建,提高了代碼的組件化和復(fù)用性;

然后是橋接模式,將類的功能層次和實(shí)現(xiàn)層次分割開來(lái),便于對(duì)應(yīng)的擴(kuò)展和使用;

然后是策略模式,可以整體的替換策略,使用也很廣泛;然后是組合模式,保證了同根同源,通過(guò)委托添加自己構(gòu)成遞歸,樹形結(jié)構(gòu),將具有樹形特點(diǎn)的對(duì)象組合起來(lái);

然后是裝飾器模式,和組合模式的結(jié)構(gòu)類似,同樣是遞歸結(jié)構(gòu),從而可以不斷的裝飾,增加新的功能,很好用;

接著是visitor訪問(wèn)者模式,通過(guò)在類外訪問(wèn)類中的數(shù)據(jù)結(jié)構(gòu)從而得到想要的結(jié)果,便于程序的可擴(kuò)展性和組件化;

接著是責(zé)任鏈模式,推卸責(zé)任,根據(jù)問(wèn)題的大小來(lái)考慮自己釋放處理,本質(zhì)是鏈表,便于職責(zé)分明;

然后是外觀模式,通過(guò)整合各個(gè)類之間的調(diào)用關(guān)系,組建成了統(tǒng)一的接口(API),便于外部類的調(diào)用;

接著是仲裁者模式,將很多類之間互相關(guān)聯(lián)的關(guān)系交給仲裁者處理,省去了各個(gè)類之間的嵌套和調(diào)動(dòng),有利于高內(nèi)聚和低耦合,思路清晰,便于擴(kuò)展;

然后是觀察者模式,通過(guò)互相委托從而能夠在被觀察的類發(fā)生改變的時(shí)候得到相應(yīng)的改變的信息并且處理;

然后是備忘錄模式,通過(guò)在某一時(shí)刻的狀態(tài)保存下來(lái),便于恢復(fù),在游戲中使用的比較多;

然后是狀態(tài)模式,將狀態(tài)當(dāng)做類,從而職責(zé)分明,解除了很多繁瑣的if和else這些分支邏輯,便于擴(kuò)展;

然后是享元模式,輕量級(jí)對(duì)象,通過(guò)共用不變對(duì)象來(lái)實(shí)現(xiàn);

然后是代理模式,懶加載真正的服務(wù)器,加快訪問(wèn)速度,代理是幫助服務(wù)器代理的;

然后是命令模式,將命令當(dāng)做類,通過(guò)保存一些列命令,從而能夠隨時(shí)執(zhí)行這些命令,需要清除命令的本質(zhì)就是一些操作和數(shù)據(jù);

最后是解釋器模式,利用編程原理的方法,來(lái)更高層次的封裝代碼,將自己開發(fā)的java代碼當(dāng)做編譯系統(tǒng),從而不用改變java代碼只修改更高語(yǔ)言層次的代碼就能實(shí)現(xiàn)不同的功能。 

看完上述內(nèi)容,你們掌握J(rèn)ava中GOF23的作用是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向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