1. 責(zé)任鏈模式
將對象連成一條鏈,并沿著這條鏈傳遞請求,直到有對象能夠處理它??梢酝ㄟ^這樣一個比喻理解:你要去給某公司借款1萬元,當(dāng)你來到柜臺的時候向柜員發(fā)起 "借款 1 萬元" 的請求時,柜員認(rèn)為金額太多,處理不了這樣的請求,他轉(zhuǎn)交這個請求給他的組長,組長也處理不了這樣的請求,那么他接著向經(jīng)理轉(zhuǎn)交這樣的請求。
責(zé)任鏈可以用if else實(shí)現(xiàn),但是if else的代碼耦合度太高,如果我們需要新加入一個處理邏輯,則需要改動代碼。責(zé)任鏈模式是創(chuàng)建多個processor類,并維護(hù)一個順序的鏈條;每個processor類提供兩個方法:canProcess、process;當(dāng)canProcess返回true時,則調(diào)用其process方法。
代碼里面經(jīng)常會看到這樣的邏輯。
2. 命令模式
命令模式,通常指的是一個對象向另一個對象發(fā)送信息指令的行為模型,比如父母命令孩子寫作業(yè)、將軍命令士兵進(jìn)攻等。我們經(jīng)過分析拆解方法會得到三個模塊,首先得有命令發(fā)送方,接著是被傳遞的命令本身,最后就是命令的接收執(zhí)行方了。好處是實(shí)現(xiàn)命令發(fā)送者與命令接收者之間的解耦。
??:遙控器是命令發(fā)送方;定義一系列指令即命令;電視機(jī)、空調(diào)等設(shè)備是命令接受者。
Hystrix作為斷路器采用命令模式,其command抽象類HystrixCommand用于包裝執(zhí)行具有潛在風(fēng)險(xiǎn)功能的代碼(通常指通過網(wǎng)絡(luò)進(jìn)行的服務(wù)調(diào)用),封裝了命令運(yùn)行邏輯(run)和服務(wù)調(diào)用失敗時回退邏輯(getFallback)。當(dāng)我們需要對新的服務(wù)用Hystrix管理時,只需要新聲明一個command。


3. 解釋器模式 - interpreter
用于SQL解析、符號處理;輸入是文法和表達(dá)式,輸出是解析結(jié)果。
4. 迭代器模式
例子是Java中的Iterator。核心組建是container表示數(shù)據(jù)集合、Iterator作為container的一個組件提供遍歷功能;Iterator接口的核心方法是hasNext和next。
5. 觀察者模式
對象間存在一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。觀察者模式有兩個組件:觀察者、被觀察者(主題subject);代碼示例如下:下面的例子中小美是備受關(guān)注的人,小王是觀察者,小美通過調(diào)用小王的getMessage方法通知其狀態(tài)更新。



Rxjava就是觀察者模式的例子,其中配置Observable和Observer。RxJava是基于JVM的響應(yīng)式擴(kuò)展,實(shí)現(xiàn)異步、基于事件編程的庫。
6. 策略模式
它定義了算法家族,所有這些算法完成的都是相同的工作,只是實(shí)現(xiàn)不同;調(diào)用者使用相同的方式調(diào)用所有的算法,減少了各種算法類與調(diào)用者之間的耦合,使得不同算法可以互相替換,讓算法變化不會影響到調(diào)用者。
各個算法通常以Strategy命名。
應(yīng)用場景:分析過程中發(fā)現(xiàn)需要在不同情況下應(yīng)用不同的業(yè)務(wù)規(guī)則,可考慮用策略模式處理。
7. 模版模式