設計模式之策略模式(二十二)

2021-10-07 20:44:23 字數 2181 閱讀 4103

strategy 抽象策略類:所有策略類的父類,為所支援的策略演算法宣告了抽象方法。

concretestrategy 具體策略類:實現了在抽象策略類中宣告的方法。

context 環境類:負責使用演算法策略,其中維持了乙個抽象策略類的引用例項。

strategy 抽象策略類

public

abstract

class

discount

concretestrategy 具體策略類

//首單五折

public

class

firstorderdiscount

extends

discount

}//會員七折

public

class

memberdiscount

extends

discount

}//前100名下單八折

public

class

top100discount

extends

discount

}

context 環境類

public

class

context

catch

(instantiationexception e)

catch

(illegalacces***ception e)

catch

(classnotfoundexception e)}}

//計算折扣

public

static

double

discountprice

(string type, double originalprice)

//計算折扣

public

static

double

discountprice

(discounttype type, double originalprice)

}//折扣列舉類

public

enum discounttype

public string getname()

public string getclassname()

}

@slf4j

public

class

test

] 折扣, 原價{} rmb, 折後** {} rmb "

, type.

getname()

, originalprice, price)

;//會員折扣

type = discounttype.member;

price = context.

discountprice

(type, originalprice)

; log.

info

("尊敬的使用者: 您所預定的遊樂園門票使用 [{}] 折扣, 原價{} rmb, 折後** {} rmb "

, type.

getname()

, originalprice, price);}

}

測試類輸出結果

尊敬的使用者: 您所預定的遊樂園門票使用 [首次下單] 折扣, 原價200.0 rmb, 折後** 100.0 rmb

尊敬的使用者: 您所預定的遊樂園門票使用 [會員折扣] 折扣, 原價200.0 rmb, 折後** 140.0 rmb

//入參指定排序方式

public

static

void

sort

(t a, comparator<

?super t> c)

else

}

設計模式(二十二) 策略模式

有時候物件需要按照某種策略改變行為,我們可以利用策略模式,將策略或演算法提取出來,作為單獨的類實現。使用策略模式,可以讓具體演算法和應用物件分離,方便的根據不同條件替換策略。下面舉乙個例子。我們有乙個計算器,它會按照快和慢兩種策略來計算結果。所以我們可以將策略封裝起來。public inte ce ...

python設計模式(二十二) 策略模式

策略模式,讓乙個類的行為或其演算法可以在執行時更改,策略是讓例項化物件動態的更改自身的某些方法使用的是types.methodtype繫結。說起策略的動態更改方法,就不得不對比一下元類的動態增加方法,元類是類的抽象,它負責乙個抽象類建立 例項化,是通過type函式來繫結方法。假設這樣的乙個應用場景 ...

設計模式(二十二)模板模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。意圖 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構...