23種設計模式之行為型模式 策略模式

2021-07-23 14:49:46 字數 699 閱讀 6347

策略模式它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。(減少各種演算法類與使用演算法類之間的耦合)

比如:商場收銀時如何**,用打折還是返利,其實都是一些演算法,用工廠來生成演算法物件,這沒錯,但演算法本身只是一種策略,最重要的是這些演算法是隨時都可能相互替換,這就是變化點,而封裝變化點是我們物件導向的一種很重要的思維方式。

策略模式(strategy)結構圖

context上下文,用乙個concreatestrategy來配置,維護乙個對strategy物件的引用

strategy:策略類,定義所有支援的演算法的公共介面

concretestrategya、concretestrategyb、concretestrategyc是具體策略類,封裝了具體的演算法或行為,繼承於strategy

看上去策略模式跟工廠模式很相像,下一節我將簡要分析一下策略模式與工廠模式的區別

java設計模式之行為型模式 策略模式

策略模式,指物件有某個行為,但是在不同的場景中,該行為有不同的實現演算法。比如每個人都要 交個人所得稅 但是 在美國交個人所得稅 和 在中國交個人所得稅 就有不同的算稅方法。許多相關類僅僅是行為不同。需要使用乙個演算法的不同實現。演算法使用了客戶不應該知道的資料。策略模式可以避免暴露複雜的 與演算法...

GoF23種設計模式之行為型模式之模板方法

概述 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。templatemethod使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。適用性1.一次性實現乙個演算法的不變的部分,並將可變的行為留給子類來實現。2.各子類中公共的行為應被提取出來並集中到乙個公共父類中以避免 重複...

設計模式 行為型模式 策略模式

電影票類 環境類 class movieticket 注入乙個折扣類物件 public void setdiscount discount discount public double getprice 折扣類 抽象策略類 inte ce discount 學生票折扣類 具體策略類 class st...