前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式-状态模式】

【设计模式-状态模式】

作者头像
Liusy
发布2020-09-01 16:28:14
2690
发布2020-09-01 16:28:14
举报
文章被收录于专栏:Liusy01Liusy01

【导读】人在不同的状态下会做出不同的行为,比如愤怒的时候会做一些出格的事,高兴的时候会分享快乐,这种就是状态模式。

一、定义

允许一个对象在其内部状态发生改变时,改变其行为。

二、实例

比如视频有几种状态,播放、暂停、加速三个状态,视频在暂停状态的时候不能进行加速。

抽象视频状态对象:

代码语言:javascript
复制
public abstract class VideoState {
    1、包含一个视频上下文,是记录当前视频处于何种状态的
    protected VideoContext videoContext;

    public void setVideoContext(VideoContext videoContext) {
        this.videoContext = videoContext;
    }
    2、播放
    public abstract void play();
    3、加速
    public abstract void speed();
    4、暂停
    public abstract void pause();
}

播放状态:

代码语言:javascript
复制
public class PlayState extends VideoState {


    @Override
    public void play() {
        System.out.println("视屏处于播放状态");
    }

    @Override
    public void speed() {
        1、如果播放中需要加速,则将视频转成播放状态
        super.videoContext.setVideoState(VideoContext.SPEED_STATE);
    }

    @Override
    public void pause() {
        2、如果播放中需要暂停,则将视频转成状态状态
        super.videoContext.setVideoState(VideoContext.PAUSE_STATE);
    }
}

加速状态:

代码语言:javascript
复制
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);
    }
}

暂停状态:

代码语言:javascript
复制
public class PauseState extends VideoState {

    @Override
    public void play() {
       super.videoContext.setVideoState(VideoContext.PLAY_STATE);
    }

    @Override
    public void speed() {
        throw new RuntimeException("暂停状态下不能加速");
    }

    @Override
    public void pause() {
        System.out.println("视屏处于暂停状态");
    }
}

视频上下文,记录视频当前处于何种状态:

代码语言:javascript
复制
public class VideoContext {

    private VideoState videoState;

    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 void setVideoState(VideoState videoState) {
        this.videoState = videoState;
        this.videoState.setVideoContext(this);
    }

    public VideoState getVideoState() {
        return videoState;
    }

    public void play(){
        this.videoState.play();
    }

    public void pause(){
        this.videoState.pause();
    }

    public void speed(){
        this.videoState.speed();
    }

}

测试类:

类图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档