在開發中我們會使用很多中介軟體,開發過程當然是單機配置,可是上生產環境的時候如何快速切換到集群配置,總不能修改**吧,這裡我們就可以結合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...