策略模式基础讲解已经很详尽:
https://www.cnblogs.com/lewis0077/p/5133812.html
补充使用实例1:网络请求重试策略
策略接口:
public interface RetryPolicy {
int getMaxNumRetries();
void setmMaxNumRetries(int mMaxNumRetries);
/**
* 重试策略的具体执行:可以根据不同的RequestException作不同的重试
*/
boolean retry(RequestException e) ;
}
抽象类
public abstract class AbstractRetryPolicy implements RetryPolicy{
//当前重试次数
protected int mCurrentRetryCount;
//最大重试次数
protected int mMaxNumRetries;
//默认的最大重试次数
public static final int DEFAULT_MAX_RETRIES = 1;
public AbstractRetryPolicy() {
this(DEFAULT_MAX_RETRIES);
}
public AbstractRetryPolicy(int maxNumRetries) {
mMaxNumRetries = maxNumRetries;
}
/**
* 获取最大重试册书
* @return
*/
public int getMaxNumRetries() {
return mMaxNumRetries;
}
/**
* 设置最大重试次数
* @param mMaxNumRetries
*/
public void setmMaxNumRetries(int mMaxNumRetries) {
this.mMaxNumRetries = mMaxNumRetries;
}
}
默认重试策略的实现:
public class DefaultRetryPolicy extends AbstractRetryPolicy {
public DefaultRetryPolicy() {
}
public DefaultRetryPolicy(int maxNumRetries) {
super(maxNumRetries);
}
/**
* 重试策略的具体执行
* @param e
* @return
*/
@Override
public boolean retry(RequestException e) {
mCurrentRetryCount++;
return checkRetry();
}
/**
* 检测重试次数是否达到最大重试次数
* @return
*/
protected boolean checkRetry() {
return mCurrentRetryCount <= mMaxNumRetries;
}
}
业务请求实体中会包含一个 RetryPolicy 对象,当需要判断是否需要重试时只需要调用该对象的 retry 函数即可。
补充使用实例2:网络请求返回数据解析
在封装网络请求时,需要对远端返回的数据进行解析,但是封装层并不知道数据的结构以及业务端需要的数据。这里可以运用策略模式,抽象原始数据解析接口,业务希望对数据进行不同的解析(加密、压缩),返回一个泛型类。
原文出处:https://www.cnblogs.com/NeilZhang/p/10208399.html
来源:oschina
链接:https://my.oschina.net/u/4308120/blog/3271790