保存所有操作流程接口
package com.godv.state;
//状态接口
public interface State {
/**
* 重置
*/
void reset(Context context);
/**
* 设置数据源
*/
void setDataSource(Context context);
/**
* 异步准备
*/
void prepareAsync(Context context);
/**
* 停止
*/
void stop(Context context);
/**
* seek
*/
void seekTo(Context context);
/**
* 开始播放
*/
void start(Context context);
/**
* 暂停
*/
void pause(Context context);
String getCurrentState();
}
封装接口重写方法 使需要的类重写抽象类方法
package com.godv.state;
public abstract class AbstractState implements State {
protected static final RuntimeException EXCEPTION = new RuntimeException("操作流程不允许");
@Override
public void reset(Context context) {
// TODO Auto-generated method stub
throw EXCEPTION;
}
@Override
public void setDataSource(Context context) {
// TODO Auto-generated method stub
throw EXCEPTION;
}
@Override
public void prepareAsync(Context context) {
// TODO Auto-generated method stub
throw EXCEPTION;
}
@Override
public void stop(Context context) {
// TODO Auto-generated method stub
throw EXCEPTION;
}
@Override
public void seekTo(Context context) {
// TODO Auto-generated method stub
throw EXCEPTION;
}
@Override
public void start(Context context) {
// TODO Auto-generated method stub
throw EXCEPTION;
}
@Override
public void pause(Context context) {
// TODO Auto-generated method stub
throw EXCEPTION;
}
}
具体的实现类
package com.godv.state;
class Idle extends AbstractState {
@Override
public void reset(Context context) {
// TODO Auto-generated method stub
context.setState(new Idle());
}
@Override
public void setDataSource(Context context) {
// TODO Auto-generated method stub
context.setState(new Initialized());
}
@Override
public String getCurrentState() {
// TODO Auto-generated method stub
return StateEnum.IDLE.getValue();
}
}
class Initialized extends AbstractState {
@Override
public void reset(Context context) {
// TODO Auto-generated method stub
context.setState(new Idle());
}
@Override
public void prepareAsync(Context context) {
// TODO Auto-generated method stub
context.setState(new Prepard());
}
@Override
public String getCurrentState() {
// TODO Auto-generated method stub
return StateEnum.INITIALIZED.getValue();
}
}
class Prepard extends AbstractState {
@Override
public void reset(Context context) {
// TODO Auto-generated method stub
context.setState(new Idle());
}
@Override
public void stop(Context context) {
// TODO Auto-generated method stub
context.setState(new Stopped());
}
@Override
public void seekTo(Context context) {
// TODO Auto-generated method stub
context.setState(new Stopped());
}
@Override
public void start(Context context) {
// TODO Auto-generated method stub
context.setState(new Started());
}
@Override
public String getCurrentState() {
// TODO Auto-generated method stub
return StateEnum.PREPARED.getValue();
}
}
class Started extends AbstractState {
@Override
public void reset(Context context) {
// TODO Auto-generated method stub
context.setState(new Idle());
}
@Override
public void stop(Context context) {
// TODO Auto-generated method stub
context.setState(new Stopped());
}
@Override
public void seekTo(Context context) {
// TODO Auto-generated method stub
context.setState(new Started());
}
@Override
public void start(Context context) {
// TODO Auto-generated method stub
context.setState(new Started());
}
@Override
public void pause(Context context) {
// TODO Auto-generated method stub
context.setState(new Pause());
}
@Override
public String getCurrentState() {
return StateEnum.STARTED.getValue();
}
}
class Stopped extends AbstractState {
@Override
public void reset(Context context) {
// TODO Auto-generated method stub
context.setState(new Idle());
}
@Override
public void prepareAsync(Context context) {
// TODO Auto-generated method stub
context.setState(new Prepard());
}
@Override
public void stop(Context context) {
// TODO Auto-generated method stub
context.setState(new Stopped());
}
@Override
public String getCurrentState() {
return StateEnum.STOPPED.getValue();
}
}
class Pause extends AbstractState {
@Override
public void stop(Context context) {
// TODO Auto-generated method stub
context.setState(new Stopped());
}
@Override
public void seekTo(Context context) {
// TODO Auto-generated method stub
context.setState(new Pause());
}
@Override
public void pause(Context context) {
// TODO Auto-generated method stub
context.setState(new Pause());
}
@Override
public String getCurrentState() {
return StateEnum.PAUSE.getValue();
}
}
目标操作类
package com.godv.state;
public class Context extends AbstractState{
private State state = new Idle();
@Override
public void reset(Context context) {
// TODO Auto-generated method stub
state.reset(context);
getCurrentState();
}
@Override
public void setDataSource(Context context) {
// TODO Auto-generated method stub
state.setDataSource(context);
getCurrentState();
}
@Override
public void prepareAsync(Context context) {
// TODO Auto-generated method stub
state.prepareAsync(context);
getCurrentState();
}
@Override
public void stop(Context context) {
// TODO Auto-generated method stub
state.stop(context);
getCurrentState();
}
@Override
public void seekTo(Context context) {
// TODO Auto-generated method stub
state.seekTo(context);
getCurrentState();
}
@Override
public void start(Context context) {
// TODO Auto-generated method stub
state.start(context);
getCurrentState();
}
@Override
public void pause(Context context) {
// TODO Auto-generated method stub
state.pause(context);
getCurrentState();
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
@Override
public String getCurrentState() {
System.out.println("当前状态 : " + state.getCurrentState());
return state.getCurrentState();
}
}
状态Enum
package com.godv.state;
public enum StateEnum {
//播放器就绪
IDLE(1, "IDLE"),
//初始化状态
INITIALIZED(2, "INITIALIZED"),
//就绪
PREPARED(3, "PREPARED"),
//开始播放状态
STARTED(4, "STARTED"),
//暂停状态
PAUSE(5, "PAUSE"),
//停止状态
STOPPED(6, "FEED_BACKED");
private int key;
private String value;
StateEnum(int key, String value) {
this.key = key;
this.value = value;
}
public int getKey() {return key;}
public String getValue() {return value;}
}
测试
package com.godv.state;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Context context = new Context();
System.out.println(context.getCurrentState());
context.prepareAsync(context); //异常
}
}