設計模式之筆記

 

設計模式—策略模式

定義:定義一系列的算法,將算法進行封裝、隔離、相互獨立、又能相互替換
使用場景:第三方支付方式選擇、底層多套API的調用
 * 支付實現原理:
 * 1.定義支付服務接口PayService ,裏面有一個payHtml方法,供選擇某種支付方式
 * 2.定義具體的支付方式實現類,例如:阿里支付、微信支付、銀行卡支付..。該類繼承PayService接口
 * 3.定義枚舉 PayContentConstant。code是支付別名,className是具體支付方式實現類的類名
 * 4.定義支付上下文PayContent,定義一個變量payServiceHashMap用於存儲當前全部的支付方式。當Spring掃描該類的時候,
 * 後將全部的支付方式注入到當前的Map中。定義一個payHtml方法用於讓用戶選擇那種支付方式,根據支付方式去跳轉到某一支付頁
 *
 * 策略模式條件:
 * 某一抽象接口服務(支付接口)、N個具體接口服務(具體支付方式)、枚舉或者常量(存儲支付方式與對應的支付實現關係)、
 * 支付上下文(知足用戶選擇某種支付方式)



設計模式—裝飾模式

定義:在不改變原有對象的基礎上,擴展不少功能
使用場景:網關+日誌記錄+接口限流+API鑑權等
 * 裝飾實現原理:
 * 1.定義一個廠家Producer ,它具備生產的功能
 * 2.定義一個廠家具體執行者ConcreteProducer,它主要負責組裝購買須要的配件
 * 3.定義一個汽車生產者 CarProducer,主要負責生產汽車
 * 4.該汽車生產者,負責生產本田汽車(HondaProducer)與寶馬汽車(BmwProducer)
 * 5.定義生產線ProductLine,裏面有N個生產線,好比 carProductLine生產線,也就是汽車生產線。
 * 它的執行順序爲 出場檢驗-寶馬生產-本田汽車生產
 *
 * 裝飾條件:
 * 某一個抽象的接口服務(廠家服務)、基礎功能實現(配件生產者)、裝飾者(汽車生產者)、具體裝飾者一、具體裝飾者二、
 * 具體裝飾者N..
 *
 * 總結:首先定義一個抽象的接口做爲父類。將基礎的功能或者不變的功能抽離做爲父類的一個執行者。
 * 定義裝飾者A,裝飾者A下有:具體的裝飾者A一、具體的裝飾者A二、具體的裝飾者A2
 * 定義裝飾者B,裝飾者下有B:具體的裝飾者B一、具體的裝飾者B二、具體的裝飾者B2

 

 

設計模式—責任鏈模式

定義:責任鏈是一種動態的行爲模式。是由每個對象對下家的引用,造成一個鏈條。請求在鏈條上運行,直到某一個對象處理這個請求。
客戶端並不知道那個鏈條處理此請求,使系統能動態的組織和分配責任。
責任鏈模式實現原理
 * 咱們用財務審批流程來闡述實現原理
 * 1.定義一個抽象的父類BaseHandler,在BaseHandler中定義個BaseHandler變量,定義BaseHandler變量的getter和setter方法
 * 用於獲取與設置當前對象。在BaseHandler中定義一個財務審批的方法 void handlerMoney(int money)
 * 2.定義三個處理者 TemManager(團隊經理)、GeneralManager(總經理)、FinanceManager(財務經理)。三者均繼承BaseHandler
 * 來處理報銷請求。假設 TemManager的下一個處理者爲GeneralManager、GeneralManager下個處理者爲FinanceManager。FinanceManager
 * 無下個處理者。TemManager能處理的金額爲<=2000,GeneralManager能處理的金額爲<=20000,FinanceManager能處理的金額爲<=200000* 每個處理者,超出處理範圍傳遞給下一個處理者。超出200000,FinanceManager將不經過。
 * 3.那麼如何設置下一個處理者呢?例如TemManager的構造器
 * public TemManager(BaseHandler baseHandler) {
 *  this.setBaseHandler(baseHandler);
 * }
 * 當前方法設置下一個處理者,而經過getBaseHandler().handlerMoney(money);
 * 將把責任交給下一個處理者,直至處理結束。
 *
 * 條件:一個抽象責任父類接口(BaseHandler)、N個具體責任執行者(TemManager)、初始化責任執行者必須設置
 * 下一個執行者。也就是 new TemManager(下一個執行者)。
 * 經過this.setBaseHandler(baseHandler);設置當前責任對象
 * 經過getBaseHandler().handlerMoney(money); 獲取當前責任對象並處理請求。
 *
 * 總結:責任鏈的執行過程對外是不可見的。對於用戶來講只知道請求被處理了,而不知道被誰處理了。每個責任鏈
 * 的執行者都會有下一個執行者,直至請求被處理了。
相關文章
相關標籤/搜索