例如:线程可运行状态,正在运行状态,阻塞状态,等待状态和终止状态。他们之间可以互相转换。
视频状态类,可以通过context在不同的状态之间切换 VideoContext 表示上下文。主要的作用就是用于不同状态之间切换,如stopState可以点换paly方式实现将videoState = PLAY_STATE ;
public class VideoContext { @Getter private VideoState videoState;//管理当前video是哪一种状态 public final static PlayState PLAY_STATE = new PlayState(); public final static SpeedState SPEED_STATE = new SpeedState(); public final static PauseState PAUSE_STATE = new PauseState(); public final static StopState STOP_STATE = new StopState(); public void setVideoState(VideoState videoState) { this.videoState = videoState; this.videoState.setVideoContext(this); } public void play(){ this.videoState.play(); } public void stop(){ this.videoState.stop(); } public void pause(){ this.videoState.pause(); } public void speed(){ this.videoState.speed(); } }四种状态之间的切换 (1)play:播放。播放状态调用speed()会将videoContext中的videoState切换为VideoContext.PAUSE_STATE这个静态类。
public class PlayState extends VideoState { @Override public void play() { System.out.println("播放。。"); } @Override public void speed() { super.videoContext.setVideoState(VideoContext.SPEED_STATE); } @Override public void pause() { super.videoContext.setVideoState(VideoContext.PAUSE_STATE); } @Override public void stop() { super.videoContext.setVideoState(VideoContext.STOP_STATE); } }(2)stop:停止播放
public class StopState extends VideoState { @Override public void play() { super.videoContext.setVideoState(VideoContext.PLAY_STATE); } @Override public void speed() { System.out.println("ERROR 不能加速。。"); } @Override public void pause() { System.out.println("ERROR 不能暂停。。"); } @Override public void stop() { System.out.println("停止播放。。"); } }(3)pause: 暂停
public class PauseState extends VideoState { @Override public void play() { super.videoContext.setVideoState(VideoContext.PLAY_STATE); } @Override public void speed() { super.videoContext.setVideoState(VideoContext.SPEED_STATE); } @Override public void pause() { System.out.println("暂停。。"); } @Override public void stop() { super.videoContext.setVideoState(VideoContext.STOP_STATE); } }(4)speed: 快进
public class SpeedState extends VideoState { @Override public void play() { super.videoContext.setVideoState(VideoContext.PLAY_STATE); } @Override public void speed() { System.out.println("快进。。"); } @Override public void pause() { super.videoContext.setVideoState(VideoContext.PAUSE_STATE); } @Override public void stop() { super.videoContext.setVideoState(VideoContext.STOP_STATE); } }测试: 源码: https://github.com/LUK-qianliu/design_pattern_in_all
