策略模式詳解(配java代碼)

設計模式之策略模式

模式介紹

策略模式作爲一種軟件設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算
法。比如我們出去旅遊的時候可能有很多種出行方式,比如說我們可以坐火車、坐高鐵、坐飛機等等。不管我們使用哪一種出行方式,最終的目的地都是一樣的。也就是選擇不同的方式產生的結果都是一樣的。

在這裏插入圖片描述
其實舉這個例子是爲了讓大家對策略模式有個概念。下面我們說一下應用場景

應用場景

1、 多個類只區別在表現行爲不同,可以使用Strategy模式,在運行時動態選擇具體要執行的行爲。
2、 需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實現。
3、 對客戶隱藏具體策略(算法)的實現細節,彼此完全獨立。

其實爲什麼要使用策略模式呢?

策略模式的優點:

我們平常寫代碼的時候,往往會使用if-else語句,如果需要很多判斷的話,需要有很多if-else語句。這種情況耦合性太高了,而且代碼臃腫,有了策略模式我們就可以避免這種現象,
策略模式遵循開閉原則,實現代碼的解耦合。擴展新的方法時也比較方便,只需要繼承策略接口就好了

當然,他也有自己的缺點:

客戶端必須知道所有的策略類,並自行決定使用哪一個策略類。
策略模式會出現很多的策略類。
context在使用這些策略類的時候,這些策略類由於繼承了策略接口,所以有些數據可能用不到,但是依然初始化了

代碼

說了這麼多,我們看一下在我們在代碼中如何實現策略模式。我這邊使用springboot框架寫一下策略模式

項目結構如下:
在這裏插入圖片描述
先創建接口類型 Strategy
在這裏插入圖片描述
然後再寫2個實現類來implements Strategy,並且Override裏面的starts方法。

ResourceA類,注意@Component(“one”) 這個註解,後面我們要用到;
在這裏插入圖片描述
ResourceB類,注意@Component(“two”) 這個註解,後面我們要用到;
在這裏插入圖片描述

我們再創建一個SimpleContext類用作上下文的作用。
在這裏插入圖片描述
我重點說一下這個類,這個類裏面主要2個方法。

第一個方法是構造函數,這個方法在創建這個類的時候就會自動調用它,溝通函數裏面我創建了hashMap,動態的將Strategy類下的實現類,通過key,value的方式存在Map裏面,這個key就是上文中@Component(“One”)和@Component(“two”)。value就是對應的實例。

第二個方法是通過getBean的方式,動態獲取實例

然後我們再寫一下controller。
在這裏插入圖片描述

然後啓動項目,訪問路徑地址。
在這裏插入圖片描述

查看後臺日誌:
在這裏插入圖片描述
ResourceA和ResourceB裏面的starts方法都執行了。

這樣寫的好處就是,以後如果我再想加ResourceC或者ResourceD等邏輯的時候,不需要改上層的代碼了,我直接寫一個ResourceC的類,再實現Strategy。就可以正常的被執行了。一定程度上實現瞭解耦

如果有同學對這個項目的Demo感興趣的話,可以掃描下方的二維碼,關注“程序員王老五”的微信公衆號,並且回覆“策略模式案例”關鍵字,即可獲取整個springboot Demo

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章