原文首發於微信公衆號:jzman-blog,歡迎關注交流!java
策略模式對應於解決某個問題的算法集合,容許用戶從這些算法集合中選擇合適的算法,能夠根據具體的業務需求,在不修改原有代碼的基礎上增長新的算法策略,這樣不只實現了算法或業務獨立,並且能夠作到統一切換、統一調用。算法
下面以旅客的出遊方式爲例實現一下策略設計模式,建立抽象策略角色以下:設計模式
/** * 抽象策略角色 * @author jzman */
public interface IStratey {
//出行
void trip();
}
複製代碼
而後,建立具體的策略角色以下:bash
/** * 具體的策略角色 * @author jzman */
public class AirStrategy implements IStratey{
@Override
public void trip() {
System.out.println("乘坐飛機!");
}
}
複製代碼
/** * 具體的策略角色 * @author jzman */
public class PersonStrategy implements IStratey{
@Override
public void trip() {
System.out.println("乘坐火車!");
}
}
複製代碼
/** * 具體的策略角色 * @author jzman */
public class TrainStrategy implements IStratey{
@Override
public void trip() {
System.out.println("步行!");
}
}
複製代碼
而後,建立環境角色以下:微信
/** * 環境角色 * 主要用於與具體的策略進行交互,分離了算法與客戶端的調用,使得算法獨立於客戶端,方便算法策略的切換 * @author jzman */
public class Context {
private IStratey iStratey;
public Context(IStratey iStratey) {
super();
this.iStratey = iStratey;
}
public void setiStratey(IStratey iStratey) {
this.iStratey = iStratey;
}
//具體業務邏輯
public void tripType() {
iStratey.trip();
}
}
複製代碼
最後,客戶端的調用以下:框架
/** * 客戶端調用 * @author jzman */
public class StrategyClient {
public static void main(String[] args) {
//建立具體的策略角色
IStratey stratey = new AirStrategy();
//建立環境角色,能夠隨意切換須要的策略
Context con = new Context(stratey);
//調用具體的算法
con.tripType();
}
}
複製代碼
上述代碼輸出結果以下:ide
乘坐飛機!
複製代碼
這是個比較簡單的例子,可能沒有實際意義,今天總結一下策略設計設計模式的使用,一方面是策略設計模式的溫習,另外一方面是計劃使用策略設計模式封裝一下 Android 開發中的圖片加載框架。能夠選擇關注我的微信公衆號:jzman-blog 獲取最新更新,一塊兒交流學習!學習