1.現在有乙個需求,根據不同的傳參paycode選擇不同的支付模式 ,
常見的if判斷如下
public string topayhtml(string paycode)else if ("weixin_pay".equals(paycode))else if ("xiaomi".equals(paycode))
return null;
}
1.定義介面, 定義共同行為方法
public inte***ce paystrategy
public class alipaystrategy implements paystrategy
}
public class weixinpaystrategy implements paystrategy
}
public class xiaomipaystrategy implements paystrategy
}
3.定義列舉型別,存放所有策略的實現
//策略列舉類,存放所有策略的實現
public enum payenumstrategy
public string getclassname()
public void setclassname(string classname)
//class完整位址
private string classname;
}
4.使用工廠初始化實現策略ben,獲取具體策略實現
public class strategyfactory catch (exception e) }}
5.定義上下文,獲取具體實現策略,並執行對應策略
@component
public class paycontextstrategy
paystrategy paystrategy = strategyfactory.getpaystrategy(paycode);
if(paystrategy==null)
return paystrategy.topayhtml();}}
6.測試
1.定義介面, 定義共同行為方法
public inte***ce paystrategy
@component
public class alipaystrategy implements paystrategy
}
@component
public class weixinpaystrategy implements paystrategy
}
@component
public class xiaomipaystrategy implements paystrategy
}
3.資料庫儲存所有策略實現,後期可配置控制是否開啟處理
create table `strategy` (
`id` int(11) not null auto_increment comment '主鍵id',
`change_name` varchar(50) default null comment '名稱',
`change_id` varchar(50) default null comment 'key_id',
`change_ben_name` varchar(255) default null comment '實現類名',
4.編輯策略上下文,獲取具體策略
@component
public class paycontextstrategy
//查詢資料庫獲取pay策略實體
if(paystrategyentity==null)
//獲取執行策略的類名-首字母小寫
string changebenname = paystrategyentity.getchangebenname();
if(stringutils.isempty(changebenname))
//通過spring找到策略ben物件
paystrategy paystrategy = springutils.getbean(changebenname, paystrategy.class);
//執行策略
return paystrategy.topayhtml();}}
5.spring上下文獲取spring注入ben物件工具類
//spring上下文中獲取ben物件
@component
@override}}
}//通過name獲取 bean.
public static object getbean(string name)
//通過class獲取bean.
public static t getbean(classclazz)
//通過name,以及clazz返回指定的bean
策略模式 反射 解決多重if else if問題
需求 商品有三種折扣價,普通客戶不享受任何優惠,vip客戶享受9折優惠,超級vip客戶享受8折優惠 當沒有用到設計模式時,我們一般會採用下面的方式處理業務 int type 1 if type 1 else if type 2 else if type 3 這樣做的好處是直觀,能以下看懂其中的邏輯關...
策略模式簡單使用
在設計賬戶系統的過程中遇到這樣乙個問題,就是當第三方賬戶需要根據第三方賬戶的型別來當前的使用者id和第三方的unionid進行乙個繫結操作。如果一般的做法呢就是寫很多的if else通過判斷不同的賬戶型別,來決定進行哪種第三方繫結的操作。下面是使用策略模式的做法,下面 演示,只需關注策略模式的流程和...
使用策略模式消除if else
最近專案中遇到如下情況 有乙個操作叫平帳,然後要對多個不同的款項進行平帳,目測有72種。然後平帳的方法只有乙個,在那個平帳方法裡面,判斷是哪一種款項,然後不同的款項有不同的處理邏輯。if 款項a if 款項b if 款項c 這個就很可怕了。因此使用策略模式來消除掉if else。先看使用策略模式之後...