一、概念
策略模式定义了一系列算法,并将每一个算法封装起来,而且他们之间可以相互切换,策略模式让算法独立使他的客户端独立而变化。
二、案例
投资理财:支付宝
本金10000
3个月 4.7
6个月 5.0
12个月 6.0
微信
本金10000
3个月 5.0
6个月 12.0
12个月 15.0
一般写法:
Public class FinaceManager{
Public enumerateFinace{
ZHIFUBAO,WEIXIN
}
Public float zhifubaoFinace(int ,month,int money){
If(month == 3){
Return money+monry*0.047/12*month}
}
If(month == 6){
Return money+monry*0.05/12*month}
}
if(month == 12){
Return money+monry*0.06/12*month}
}
Public float weixinFinace(int ,month,int money){
If(month == 3){
Return money+monry*0.06/12*month}
}
If(month == 6){
Return money+monry*0.12/12*month}
}
if(month == 12){
Return money+monry*0.15/12*month}
}
//获取计算金额
Public fioat finace(int month,int money,Finance finace){
Switch(finace){
Case ZHIFUBAO:
Return zhifubaoFinace(month,money);
Case WEIXIN:
Return weixinFinace(month,money);
}
}
}
弊端:
随着枚举的内容越来越多,那么必将会导致类越来越大。每个利息不一样。因此,建议使用策略模式。
//这个就是采用了策略设计模式,说白了就是在原来的基础上进行了分离。
Public interface Ifinance{
Float finace(int mounth,int money);
}
Public class zhifubaoFinace implements Ifinance{
@override
Float finace(int month.int money){
If(month == 3){
Return money+monry*0.047/12*month}
}
If(month == 6){
Return money+monry*0.05/12*month}
}
if(month == 12){
Return money+monry*0.06/12*month}
}
}
}
//策略模式的上下文,类似安卓中的上下文。
//可以获取一些额外胡基本信息。--理财有关
//但这s类有点多余,实际开发中可以不写。
Public class FinanceContext{
Public Ifinance ifnance;
Public FinanceContext(IFinance finance){
This.ifinance = finance;
}
Public float finace(int month,int money){
Return ifinance.finance(month,money);
}
}
开发中的使用场景?
第三方:
Glide的缓存策略、ImageLoader的生成图片文件的命名策略,日志打印工具的策略
源码里面:
属性动画:setInterpolator差值器
recycleView.setLayoutmanager 可以是ListView也可以椒GlideView.
主要特点:相互切换。
三、Log日志的输出策略
Timber:可以说是增强版的log,
使用方式:完整版GitHub可以参考