設計模式之 策略模式

2021-08-30 17:22:42 字數 1689 閱讀 3247

策略模式:它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式的變化,不會影響到使用演算法的客戶。

我們來看下策略模式的uml圖:

業務場景:現在我們在做乙個商場的優惠活動,這個活動根據節日的不同也會調整相應的活動規則,比如五一**周我們是所有會員商品一律8折,節日過後恢復原價不再優惠,等到了國慶商場有有了新的**活動,滿300減150,那麼根據這樣的業務需求我們來看看使用策略模式到底應該怎麼做?

首先我們需要建立乙個公共的策略類

public inte***ce strategy
接下來我們分別定義三種活動規則,首先是沒有優惠活動的收費方式

public class normalstrategy implements strategy 

}

打折

public class discountstrategy implements strategy 

@override

public double regulation(double money) 

}

滿300返150

public class rebatestrategy implements strategy 

@override

public double regulation(double money) 

system.out.println("不夠返現條件 : " + money);

return money;}}

接下來,我們需要建立乙個封裝類也可以叫上下文的類,對我們的活動規則進行乙個維護

public class context }}

最後我們分別來測試看下結果是否正確:

可能有讀者就存在疑問了,這跟簡單工廠模式又有什麼區別呢?第一:首先在我們的封裝類中其實已經使用到了簡單工廠模式,我們使用簡單工廠模,我們通過這種方式的封裝將判斷是什麼優惠的過程從客戶端轉移到了我們的程式中,客戶不需要再去關係;

第二:我們來看下我們昨天的簡單工廠模式客戶端事怎麼呼叫的,再來看看我們今天使用策略模式是怎麼呼叫的

通過上面我們可以看到,簡單工廠模式需要客戶端認識兩個類,也就是ca***ctory和product,而簡單工廠模式只需要客戶端認識乙個類,也就是context,這樣就降低了我們**的耦合性。

設計模式之策略模式

include using namespace std 飛行行為介面類 class flystrategy 高空飛行行為具現類 class heightfly public flystrategy virtual void fly private heightfly 低空飛行行為具現類 class ...

設計模式之 策略模式

策略模式 strategy pattern 定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。策略模式是一種定義了一系列演算法的方法,從概念上來看,所以得這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各...

設計模式之策略模式

何為策略,就是可以實現目標的方案集合。而完成一項任務有不同的方式,每一種方式稱為乙個策略。策略模式就是定義一系列演算法,將每乙個演算法封裝起來,並讓他們可以相互替換。很簡單的乙個例子 年底移動公司推出很多的活動,比如說 存話費贈食用油,交話費贈話費,買手機贈話費 等等。推出這些個活動目的就只有乙個,...