设计模式(二十六):状态模式

mac2026-06-08  5

1. 定义

例如:线程可运行状态,正在运行状态,阻塞状态,等待状态和终止状态。他们之间可以互相转换。

2. 视频之间的状态切换

视频状态类,可以通过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

最新回复(0)