最近项目中需要上传文件,各种上传异常、重传、断点续传状态很多很复杂,决定使用状态模式,所以研究一下状态模式。
一、状态模式介绍
1. 一般性UML图
2. 简单例子
以上传文件为例学习一下状态模式
给IState设置3个接口,分别是请求上传、上传、上传完成;定义三个状态实现IState接口,每个状态都需要实现这三个接口,如下:
定义Uploader类作为Context,在Uploader中定义三个状态,分别问空闲状态、排队状态、上传状态。
代码:
public class Uploader implements IState {
private IState mIdleState;
private IState mQueuingState;
private IState mUploadingState;
private IState mState;
public Uploader() {
mIdleState = new IdleState(this);
mQueuingState = new QueuingState(this);
mUploadingState = new UploadingState(this);
}
public void start() {
setState(mIdleState);
request();
}
@Override
public void request() {
mState.request();
}
@Override
public void upload() {
mState.upload();
}
@Override
public void finished() {
mState.finished();
}
public IState getState() {
return mState;
}
public void setState(IState state) {
mState = state;
}
public IState getIdleState() {
return mIdleState;
}
public IState getQueuingState() {
return mQueuingState;
}
public IState getUploadingState() {
return mUploadingState;
}
}
public interface IState {
public static final String TAG = "State";
void request();
void upload();
void fini