策略模式應該這樣玩(二)

2021-10-17 23:13:44 字數 2153 閱讀 9879

第一版策略模式應該這樣玩(一)利用的是reflections反射框架 + 註解方式實現的策略模式,這種是必須引用外部框架reflections包才能使用,如果不想引用,那有沒有另外一種方式可以實現策略模式呢,答案肯定是有的咯。

/**

* @description:支付的策略類

* @auther:cc

* @data:2020/4/18 22:12

*/public

inte***ce

strategy

/** * @description:工商銀行的支付

* @auther:cc

* @data:2020/4/18 22:13

*/@service

public

class

icbcstrategy

implements

strategy

/** * 計算需要支付的金額

* @param totalmoney 總金額

* @return

*/@override

public

double

pay(

int totalmoney)

}/**

* @description:建設銀行的支付

* @auther:cc

* @data:2020/4/18 22:13

*/@service

public

class

ccbstrategy

implements

strategy

/** * 計算需要支付的金額

* @param totalmoney 總金額

* @return

*/@override

public

double

pay(

int totalmoney)

}

2.建立bean的工廠類。可以根據選擇的不同通道,生成對應的銀行支付物件

/**

* @description:建立bean的工廠類

* @auther:cc

* @data:2020/4/18 22:25

*/@component

public

class

stragefactory

implements

//存放所有strategy介面的實現

private hashmap

beanmap =

newhashmap

<

>()

;private map

getfixedgroup()

hashmap

groupmap =

newhashmap

<

>()

; string[

getbeannamesfortype

(strategy.

class);

for(string beanname : beannames)

groupmap.

put(strategy.

name()

, strategy);}

this

.beanmap = groupmap;

return beanmap;

}/**

* 根據選擇的通道,生產對應銀行物件

* @param channelid

* @return

*/public strategy getstrategybychannelname

(string channelname)

throw exception

}

/**

* @description:根據選擇的銀行,進行相應的折扣計算。

* @auther:cc

* @data:2020/4/18 22:05

*/@controller

("/pay"

)public

class

paycontroller

}

結果與第一期驗證結果一樣,故不貼圖

就這樣學策略模式

第三種設計模式 行為型模式,共11種 策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模式 狀態模式 訪問者模式 中介者模式 直譯器模式。先來張圖,看看這11中模式的關係 第一類 通過父類與子類的關係進行實現。第二類 兩個類之間。第三類 類的狀態。第四類 通過中間類 策略...

(二)策略模式

定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...

二 策略模式

在策略模式 strategy pattern 中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。主要解決了 在有多種演算法相似...