本文主要是介绍设计模式之---状态模式men看了会沉默,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
状态模式
定义:
允许一个对象在其内部状态改变时,改变它的行为。也可只做状态转换。
类型:
行为型
使用场景:
一个对象存在多个状态(不同状态下行为不同),且状态可相互转换。
优点:
不同状态隔离,每个状态都是一个类。
把各种状态的转换逻辑,分布到State的子类中,减少相互间依赖。
增加新的状态非常简单。
缺点:
状态多的业务场景导致类数目增加,系统复杂。
状态模式相关设计模式:
状态模式和享元模式。
代码
//状态抽象类CourseVideoState
public abstract class CourseVideoState {protected CourseVideoContext courseVideoContext;public void setCourseVideoContext(CourseVideoContext courseVideoContext) {this.courseVideoContext = courseVideoContext;}public abstract void play();public abstract void speed();public abstract void pause();public abstract void stop();
}//状态实现类PlayState
public class PlayState extends CourseVideoState {@Overridepublic void play() {System.out.println("正常播放");}@Overridepublic void speed() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.SPEED_STATE);}@Overridepublic void pause() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.PAUSE_STATE);}@Overridepublic void stop() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.STOP_STATE);}
}//状态实现类SpeedState
public class SpeedState extends CourseVideoState {@Overridepublic void play() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.PLAY_STATE);}@Overridepublic void speed() {System.out.println("快进中。。。");}@Overridepublic void pause() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.PAUSE_STATE);}@Overridepublic void stop() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.STOP_STATE);}
}//状态实现类PauseState
public class PauseState extends CourseVideoState {@Overridepublic void play() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.PLAY_STATE);}@Overridepublic void speed() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.SPEED_STATE);}@Overridepublic void pause() {System.out.println("暂停ing。。。。");}@Overridepublic void stop() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.STOP_STATE);}
}//状态实现类StopState
public class StopState extends CourseVideoState {@Overridepublic void play() {super.courseVideoContext.setCourseVideoState(CourseVideoContext.PLAY_STATE);}@Overridepublic void speed() {System.out.println("停止状态不能快进");}@Overridepublic void pause() {System.out.println("停止状态不能暂停");}@Overridepublic void stop() {System.out.println("停止了");}}//上下文类CourseVideoContext
public class CourseVideoContext {private CourseVideoState courseVideoState;public CourseVideoState getCourseVideoState() {return courseVideoState;}public void setCourseVideoState(CourseVideoState courseVideoState) {this.courseVideoState = courseVideoState;this.courseVideoState.setCourseVideoContext(this);}public final static PlayState PLAY_STATE = new PlayState();public final static StopState STOP_STATE = new StopState();public final static SpeedState SPEED_STATE = new SpeedState();public final static PauseState PAUSE_STATE = new PauseState();public void play() {this.courseVideoState.play();}public void stop() {this.courseVideoState.stop();}public void pause() {this.courseVideoState.pause();}public void speed() {this.courseVideoState.speed();}}//测试类
public class Test {public static void main(String[] args) {CourseVideoContext courseVideoContext = new CourseVideoContext();courseVideoContext.setCourseVideoState(new PlayState());System.out.println("当前视频处于" + courseVideoContext.getCourseVideoState().getClass().getSimpleName());courseVideoContext.pause();System.out.println("当前视频处于" + courseVideoContext.getCourseVideoState().getClass().getSimpleName());courseVideoContext.speed();System.out.println("当前视频处于" + courseVideoContext.getCourseVideoState().getClass().getSimpleName());courseVideoContext.stop();System.out.println("当前视频处于" + courseVideoContext.getCourseVideoState().getClass().getSimpleName());courseVideoContext.pause();System.out.println("当前视频处于" + courseVideoContext.getCourseVideoState().getClass().getSimpleName());courseVideoContext.play();System.out.println("当前视频处于" + courseVideoContext.getCourseVideoState().getClass().getSimpleName());}
}
类图
这篇关于设计模式之---状态模式men看了会沉默的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!