// 状态抽象类
public abstract class CourseVideoState {
    protected CourseVideoContext courseVideoContext;
    public void setCourseVideoContext(CourseVideoContext courseVideoContext) {
        this.courseVideoContext = courseVideoContext;
    }
    public abstract void play();
    public abstract void speed();
}
// 上下文
public class CourseVideoContext {
    private CourseVideoState state;
    public final static PlayState PLAY_STATE = new PlayState();
    public final static SpeedState SPEED_STATE = new SpeedState();
    public CourseVideoState getState() {
        return state;
    }
    public void setState(CourseVideoState state) {
        this.state = state;
        this.state.setCourseVideoContext(this);
    }
    public void play(){
        this.state.play();
    }
    public void speed(){
        this.state.speed();
    }
}
// 播放状态
public class PlayState extends CourseVideoState {
    @Override
    public void play() {
        System.out.println("正常播放视频");
    }
    @Override
    public void speed() {
        super.courseVideoContext.setState(CourseVideoContext.SPEED_STATE);
    }
}
// 加速播放状态
public class SpeedState extends CourseVideoState {
    @Override
    public void play() {
        super.courseVideoContext.setState(CourseVideoContext.PLAY_STATE);
    }
    @Override
    public void speed() {
        System.out.println("正在加速播放视频");
    }
}
// 使用
public class Test {
    public static void main(String[] args){
        CourseVideoContext context = new CourseVideoContext();
        context.setState(new PlayState());
        System.out.println("当前状态:"+ context.getState().getClass().getSimpleName());
        context.speed();
        System.out.println("当前状态:"+ context.getState().getClass().getSimpleName());
        context.play();
        System.out.println("当前状态:"+ context.getState().getClass().getSimpleName());
    }
}
// out put
当前状态:PlayState
当前状态:SpeedState
当前状态:PlayState