之前了解策略模式,都是看的一些理論知識然後敲了一些小demo。比如,
定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化不會影響到使用演算法的使用者
處理掉if…else…
型別:行為型
系統有很多類,而他們的區別僅僅在於他們的行為不同
乙個系統需要動態地在幾種演算法中選擇一種
優點開閉原則
避免使用多重條件轉移語句
提高演算法的保密性和安全性
缺點客戶端必須知道所有的策略類,並自行決定用哪乙個策略類
產生很多策略類
策略模式,為了解決應用層的判斷,再加上工廠模式
public
inte***ce
promotionstrategy
返現類public
class
fanxianpromotionstrategy
implements
promotionstrategy
}
立減類public
class
lijianpromotionstrategy
implements
promotionstrategy
}
無**類public
class
emptypromotionstrategy
implements
promotionstrategy
}
工廠模式public
class
promotionstrategyfactory
private
static
final promotionstrategy non_promotion=
newemptypromotionstrategy()
;private
promotionstrategyfactory()
public
static promotionstrategy getpromotionstrategy
(string promotiontype)
private
inte***ce
promotionkey
main 方法public static void main(string args)
現在工作中也遇到了其中的一種情況,有3個特別類似的介面,之前的**寫的是if else if else 這樣的一坨,對於我們有要求的程式設計師來說肯定是無法接受的。
先說一下大體思路吧,
1.乙個介面,
2.乙個抽象類實現這個介面,裡面有幾個抽象方法,(抽象方法是三個頁面不同地方的實現)和幾個私有方法,(相同的地方)
3.三個具體的實現類,繼承這個抽象類,
大家看到這可能會有些疑惑,為什麼會有這個抽象類,本來也是可以沒有這個抽象類的,那怎麼實現呢?就是每個不同的頁面實現不同的邏輯唄,各自一套**,前提都說了,這三個頁面大體是一樣的,這樣**不就太重複了嘛。所以這個時候就用到了模板方法了。將相同的方法封裝在一起。
接下來就是激動人心的時刻了,**來了。
介面類
public
inte***ce
queryservice
抽象類public
abstract
class
abstractqueryservice
implements
queryservice
// 抽象方法
protected
abstract responseobj
>
handlerbeforequery
(query query)
;// 抽象方法
protected
abstract list
query
(query query)
;// 私有方法
private list
buildqueryresponse()
}
具體類
裡面是抽象方法,那麼怎麼保證不同的頁面查詢不同的邏輯呢
@service
("oneservice"
)public
class
oneservice
extends
abstractqueryservice
配置
// 例項化
@autowired
private map
queryservicemap;
/** 頁面一 */
public
static
final string one_query =
"oneservice"
;/** 頁面二 */
public
static
final string two_query =
"twoservice"
;/** 頁面三 */
public
static
final string three_query =
"threeservice"
;// 頁面獲取
public responseobj
>
listchannelorder
(@requestbody pagerequest request)
鑑於**私密性,只能寫個大概。 模板方法模式與策略模式
在學習設計模式中,最令人頭疼的不是這些模式怎麼記,而是許多設計模式太多相似,讓人眼花繚亂,單獨看某乙個設計模式,我們沒有問題,可是當全域性看時,一時間不知道自己該用哪乙個或者我用的到底是哪乙個。這是定義 模板方法 templatemethod 模式 定義乙個操作中的演算法骨架,而將演算法的一些步驟延...
命令模式 策略模式 模板方法
一 策略模式 策略模式 封裝易變化的演算法,可互相替換。gof 設計模式 中說道 定義一系列演算法,把它們乙個個封裝起來,並且使它們可以相互替換。該模式使得演算法可獨立於它們的客戶變化。這裡講兩個點 1 推送方式可以互相替換 2 這些推送方式只是單純的屬於推送服務這個類本身。二 命令模式 命令模式 ...
模板方法模式 策略模式區別聯絡
模板方法模式 定義 一系列演算法,子類延伸實現。著重點在於 子類去處理不同的方法實現。看下面例子。假如乙個支付 都包含三個部分 生成訂單 呼叫api發起支付 處理訂單 購物流程 模板方法基類 authorliangxing.zhu create 2018 9 15 since1.0.0 public...