自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從 JDK 中,我們能學(xué)到哪些設(shè)計(jì)模式?

新聞 前端
看完本篇,面試問道設(shè)計(jì)模式就不用再支支吾吾地說...單例工廠了!

結(jié)構(gòu)性模式:

適配器模式:

常用于將一個(gè)新接口適配舊接口

肥朝小聲逼逼:在我們業(yè)務(wù)代碼中經(jīng)常有新舊接口適配需求,可以采用該模式。

橋接模式:

將抽象和抽象的具體實(shí)現(xiàn)進(jìn)行解耦,這樣可以使得抽象和抽象的具體實(shí)現(xiàn)可以獨(dú)立進(jìn)行變化。

肥朝小聲逼逼:這個(gè)模式,其實(shí)我們每天都在用到,但是你可能卻渾然不知。只要你用到面向接口編程,其實(shí)都是在用橋接模式。

組合模式

讓客戶端看起來在處理單個(gè)對象和對象的組合是平等的,換句話說,某個(gè)類型的方法同時(shí)也接受自身類型作為參數(shù)。(So in other words methods on a type accepting the same type)

肥朝小聲逼逼:從上面那句英文我們就可以得知,組合模式常用于遞歸操作的優(yōu)化上,比如每個(gè)公司都有個(gè)boss系統(tǒng),都會(huì)有什么菜單的功能。比如一級菜單下有二級菜單,二級菜單又有三級菜單。刪除一級菜單的時(shí)候需要不斷刪除子菜單,那么這個(gè)設(shè)計(jì)模式你可以試試??傊?,凡是有級聯(lián)操作的,你都可以嘗試這個(gè)設(shè)計(jì)模式。

裝飾者模式

動(dòng)態(tài)的給一個(gè)對象附加額外的功能,因此它也是子類化的一種替代方法。該設(shè)計(jì)模式在JDK中廣泛運(yùn)用,以下只是列舉一小部分

肥朝小聲逼逼:這個(gè)模式使用就太廣了,我們常用的AOP,既有動(dòng)態(tài)代理,也有裝飾者的味道。

門面模式

為一組組件,接口,抽象或子系統(tǒng)提供簡化的接口。

肥朝小聲逼逼:我們每天使用的SLFJ日志就是門面日志,比如我們使用Dubbo,向外提供的服務(wù)就盡量采用門面模式,然后服務(wù)在調(diào)用各種service做聚合。

享元模式

使用緩存來減少對小對象的訪問時(shí)間

肥朝小聲逼逼:只要用到了緩存,基本都是在使用享元模式。很多同學(xué)都說自己的項(xiàng)目太low了,都沒有用到什么設(shè)計(jì)模式,這不是開玩笑嗎,你用個(gè)map緩存幾個(gè)對象,基本上都運(yùn)用了享元的思想。

代理模式

代理模式用于向較簡單的對象代替創(chuàng)建復(fù)雜或耗時(shí)的對象。

肥朝小聲逼逼:代理模式用得很廣泛,基本所有大家知道的開源框架,都用到了動(dòng)態(tài)代理。

創(chuàng)建模式

抽象工廠模式

抽象工廠模式提供了一個(gè)協(xié)議來生成一系列的相關(guān)或者獨(dú)立的對象,而不用指定具體對象的類型。它使得應(yīng)用程序能夠和使用的框架的具體實(shí)現(xiàn)進(jìn)行解耦。在JDK和許多開源框架,比如Spring中隨處可見,它們很容易被發(fā)現(xiàn)。任何用于創(chuàng)建對象但返回接口或抽象類的,就是抽象工廠模式了。(any method that is used to create an object but still returns a interface or abstract class)

肥朝小聲逼逼:從英文就可以得出,該模式可以與策略模式結(jié)合使用。

建造者模式

用于通過定義一個(gè)類來簡化復(fù)雜對象的創(chuàng)建,該類的目的是構(gòu)建另一個(gè)類的實(shí)例。構(gòu)建器模式還允許實(shí)現(xiàn)Fluent接口。

肥朝小聲逼逼:這個(gè)在我們業(yè)務(wù)代碼中使用的場景太廣泛了。比如訂單系統(tǒng)大部分項(xiàng)目都有,訂單對象就是一個(gè)復(fù)雜對象,我們就可以采用建造者模式來做。

工廠方法

只是一個(gè)返回實(shí)際類型的方法。

肥朝小聲逼逼:這個(gè)屬于大家都會(huì)的設(shè)計(jì)模式,不多過介紹。

原型模式

使得類的實(shí)例能夠生成自身的拷貝。如果創(chuàng)建一個(gè)對象的實(shí)例非常復(fù)雜且耗時(shí)時(shí),就可以使用這種模式,而不重新創(chuàng)建一個(gè)新的實(shí)例,你可以拷貝一個(gè)對象并直接修改它。

肥朝小聲逼逼:這個(gè)你以為是冷門的設(shè)計(jì)模式,其實(shí)錯(cuò)了,這個(gè)是大熱門的設(shè)計(jì)模式。比如我們業(yè)務(wù)代碼,經(jīng)常要各種DTO、BO、DO、VO轉(zhuǎn)換,其實(shí)就可以參考原型設(shè)計(jì)模式的思想來做。

單例模式

用來確保類只有一個(gè)實(shí)例。Joshua Bloch在Effetive Java中建議到,還有一種方法就是使用枚舉。

肥朝小聲逼逼:在平時(shí)開發(fā)中,單例是我們用得最多的了,因?yàn)镾pring的bean,默認(rèn)就是單例級別的。單例屬于大家基本都會(huì)的設(shè)計(jì)模式。

行為模式

責(zé)任鏈

通過把請求從一個(gè)對象傳遞到鏈條中下一個(gè)對象的方式來解除對象之間的耦合,直到請求被處理完畢。鏈中的對象是同一接口或抽象類的不同實(shí)現(xiàn)。

肥朝小聲逼逼:凡是帶有 Filter 關(guān)鍵詞的,基本都在用這個(gè)設(shè)計(jì)模式。在業(yè)務(wù)代碼使用的場景實(shí)在是太多了,用到攔截器的地方基本都在用這個(gè)設(shè)計(jì)模式。

命令模式

將命令包裝在對象中,以便可以將其存儲,傳遞到方法中,并像任何其他對象一樣返回。

肥朝小聲逼逼:命令模式使用頻率較高,和策略模式比較像,具體區(qū)別可以搜索一下。如果用過 Activiti 工作流引擎的朋友可以看一下里面的源碼,很多地方都用到了命令模式。

解釋器模式

此模式通常描述為該語言定義語法并使用該語法來解釋該格式的語句。(This pattern generally describes defining a grammar for that language and using that grammar to interpret statements in that format.)

肥朝小聲逼逼:這個(gè)比較冷門,肥朝沒怎么用過,你用過的話可以留言告訴肥朝。

迭代器模式

提供一個(gè)統(tǒng)一的方式來訪問集合中的對象。

肥朝小聲逼逼:這個(gè)中間件和基礎(chǔ)框架組的同學(xué)可能用得比較多,業(yè)務(wù)代碼的話用得不多,不過JDK中的這種使用很經(jīng)典,可以看看。

中介者模式

通過使用一個(gè)中間對象來進(jìn)行消息分發(fā)以及減少類之間的直接依賴。

肥朝小聲逼逼:看到這個(gè)描述不用我多說什么,業(yè)務(wù)代碼使用的場景太多了。比如你們用MQ,其實(shí)就是在用中介者模式。所以肥朝一再強(qiáng)調(diào),即使是每天CRUD,關(guān)注肥朝一起學(xué)習(xí),也能給你的CRUD項(xiàng)目,加上美顏+濾鏡(設(shè)計(jì)模式)的加強(qiáng)效果。

備忘錄模式

生成對象狀態(tài)的一個(gè)快照,以便對象可以恢復(fù)原始狀態(tài)而不用暴露自身的內(nèi)容。比如Date對象通過自身內(nèi)部的一個(gè)long值來實(shí)現(xiàn)備忘錄模式。

肥朝小聲逼逼:這個(gè)在業(yè)務(wù)中使用得不多,據(jù)肥朝了解其中一種場景是,你要把數(shù)據(jù)丟到MQ,但是MQ暫時(shí)不可用,那么你把數(shù)據(jù)暫存到DB,后面再輪詢丟到MQ。如果你有更好的場景,留言告訴肥朝。

空對象模式

它允許您抽象空對象的處理。

肥朝小聲逼逼:這個(gè)業(yè)務(wù)代碼用得不多,但是JDK中的這幾個(gè)方法我們倒是挺常用的。

觀察者模式

用于為組件提供一種靈活地向感興趣的接收者廣播消息的方式。

肥朝小聲逼逼:我們業(yè)務(wù)代碼一般是基于Zookeeper來做觀察者的?;旧嫌玫絑K的地方,都是在用觀察者模式,比如分布式鎖,比如服務(wù)發(fā)現(xiàn)等。

狀態(tài)模式

允許您在運(yùn)行時(shí)根據(jù)內(nèi)部狀態(tài)輕松更改對象的行為。

肥朝小聲逼逼:這個(gè)在業(yè)務(wù)代碼用得就太廣泛了,我就不信你們系統(tǒng)還沒有“狀態(tài)”了。比如我們常見的訂單狀態(tài)或者各種XX狀態(tài),都可以用得上。

策略模式

使用這個(gè)模式來將一組算法封裝成一系列對象。通過調(diào)用這些對象可以靈活的改變程序的功能。

肥朝小聲逼逼:這個(gè)太高頻了,常用于優(yōu)化大量的 if-else ,如果這個(gè)設(shè)計(jì)模式都不會(huì),出去不要說關(guān)注過肥朝的公眾號!

模板方法模式

讓子類可以重寫方法的一部分,而不是整個(gè)重寫,你可以控制子類需要重寫那些操作。

肥朝小聲逼逼:這個(gè)模式也是非常高頻的模式。業(yè)務(wù)代碼中經(jīng)常遇到有很多相同的部分,我們可以做一個(gè)抽象類,子類來實(shí)現(xiàn)差異化,如果還不知道的,趕緊搜索一下,再次強(qiáng)調(diào),非常高頻。

訪問者模式

提供一個(gè)方便的可維護(hù)的方式來操作一組對象。它使得你在不改變操作的對象前提下,可以修改或者擴(kuò)展對象的行為。

參考外國文獻(xiàn): http://h5ip.cn/lPtD

[[263376]]

責(zé)任編輯:張燕妮 來源: 肥朝
相關(guān)推薦

2015-10-29 13:31:54

Ube臉書模式

2015-11-18 09:15:17

2022-09-13 08:05:47

AlloyDb架構(gòu)數(shù)據(jù)庫

2024-08-16 13:59:00

2009-07-07 16:39:40

JDK Observe

2024-12-03 08:57:30

2022-03-21 10:21:50

jQuery代碼模式

2011-10-18 11:43:25

UNIXC語言丹尼斯·里奇

2024-12-04 07:59:48

2015-10-09 17:54:35

德國電信/運(yùn)營商

2011-10-17 10:24:33

C語言

2020-01-08 14:32:06

物聯(lián)網(wǎng)黑客網(wǎng)絡(luò)安全

2021-04-19 21:25:48

設(shè)計(jì)模式到元

2011-12-28 15:24:10

設(shè)計(jì)模式

2017-12-22 08:40:47

2024-09-30 08:01:12

Oracle數(shù)據(jù)庫服務(wù)生態(tài)

2011-12-27 10:17:56

JDKJava

2021-03-10 08:20:54

設(shè)計(jì)模式OkHttp

2010-11-26 16:17:48

設(shè)計(jì)模式JDK

2023-12-30 21:02:36

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號