策略模式 模板方法的使用

2021-10-02 05:59:18 字數 2861 閱讀 7742

之前了解策略模式,都是看的一些理論知識然後敲了一些小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...