Java設計模式之策略模式

2021-09-14 04:32:57 字數 2115 閱讀 9416

在開發中我們會使用很多中介軟體,開發過程當然是單機配置,可是上生產環境的時候如何快速切換到集群配置,總不能修改**吧,這裡我們就可以結合spring來使用策略模式。
在開發中常常遇到這種情況,實現某乙個功能有多方式,我們可以根據不同的條件選擇不同的方式來完成該功能。最常用的方法是將這些演算法方式寫到乙個類中,在該類中提供多個方法,每乙個方法對應乙個具體的演算法;或者通過if…else…或者case等條件判斷語句來進行選擇。

然而該類**將較複雜,維護較為困難。如果我們把乙個類中經常改變或者將來可能改變的部分提取出來,作為乙個介面,然後在類中包含這個物件的例項,這樣類的例項在執行時就可以隨意呼叫實現了這個介面的類的行為。這就是策略模式。

我們直接來看例子:

1.策略介面

/**

* description: strategy pattern inte***ce

* created at: 2017/12/18

*/public inte***ce strategy

2.準備兩個實現類

/**

* description: 實現類a

* author: lllx

* created at: 2017/12/18

*/public class strategya implements strategy

}/**

* description: 實現類b

* author: lllx

* created at: 2017/12/18

*/public class strategyb implements strategy

}

3.策略執行context類

/**

* description: 策略執行

* author: lllx

* created at: 2017/12/18

*/public class context

/* getter and setter */

public strategy getstg()

public void setstg(strategy stg)

}

這時候我們準備乙個main方法來測試一下他

/**

* description: strategytest

* author: lllx

* created at: 2017/12/18

*/public class strategytest

}

執行結果:

例項化不同的實現類可以出現不同的結果。

我們主要利用spring的核心ioc來實現它,還是使用上面的例子;

由於我們要在spring的配置檔案中來注入context的例項:

這樣就可以通過只修改配置檔案來更改context的實現類,從而達到策略模式的目的。

在開發環境中,許多中介軟體使用的是單機配置。可到了生產我們就需要使用集群配置。這裡我們就可以通過策略模式來快速改變中介軟體的配置,現在我們以redis為例:

1.策略介面

首先我們把redis方法抽成乙個介面

public inte***ce jedisclient
2.單機和集群兩個實現類這裡我們準備單機和集群兩個實現類:jedisclientpool和jedisclientcluster。實現上面的jedisclient介面,分別使用單機和集群的**來實現這些方法。因為**冗長就不在這裡貼出來了。

3.配置檔案

我們使用不同的環境只需要把不用的配置注釋掉就好。

這樣在我們開發時只需要注釋掉連線集群的配置,而在上線時注釋掉單機的配置就好。

spring與策略模式

java 設計模式之策略模式

策略模式非常簡單,也不再舉例子了,它其實就是根據clinet選擇的不同,執行不同的 避免了if.else 和switch case 的不方便和耦合。甚至說你可能平常經常用,只是不知道這是策略模式。類圖 對於擁有公共介面的first,second,third,給clinet提供乙個類context 去...

java設計模式之策略模式

很久沒有更新過設計模式的學習了,最近在看的幾種設計模式在專案實際開發過程中不常用,所以並沒有彙總成部落格寫出來 這一次介紹的是策略模式。策略模式和工廠模式的思想有點類似,都是把物件或資料的獲取封裝起來,需要使用的時候傳入相應的引數獲取相關的物件或資料。工廠模式是對建立物件進行封裝,乙個對操作行為進行...

java設計模式之策略模式

uml設計 定義以及使用場景 定義一系列演算法,將每個演算法單獨封裝,使之可以相互替換,具體方法策略的選擇由客戶端決定,一般適用於多選一的場景。示例 定義乙個介面message,定義兩個類qq wx 都實現了message介面,定義乙個類messagecontroller,訊息控制中心,決定執行me...