首页 > 其他 > 详细

状态模式

时间:2020-01-17 00:38:32      阅读:105      评论:0      收藏:0      [点我收藏+]

个人博客

http://www.milovetingting.cn

状态模式

模式介绍

状态模式中的行为是由状态来决定的,不同状态下有不同的行为。

模式定义

当一个对象的内在状态改变时允许其改变行为。

使用场景

  1. 一个对象的行为取决于它的状态,并且它必须在运行时根据状态来改变行为。

  2. 代码中包含大量与对象状态有关的条件语句。

简单使用

定义状态接口

public interface TvState {
    public void nextChannel();
    public void prevChannel();
    public void turnUp();
    public void turnDown();
}

定义实现类

public class PowerOnState implements TvState {

    @Override
    public void nextChannel() {
        System.out.println("下一个频道");
    }

    @Override
    public void prevChannel() {
        System.out.println("上一个频道");
    }

    @Override
    public void turnUp() {
        System.out.println("增加音量");
    }

    @Override
    public void turnDown() {
        System.out.println("减小音量");
    }

}

public class PowerOffState implements TvState{

    @Override
    public void nextChannel() {
        
    }

    @Override
    public void prevChannel() {
        
    }

    @Override
    public void turnUp() {
        
    }

    @Override
    public void turnDown() {
        
    }

}

定义控制类接口

public interface PowerController {
    public void powerOn();
    public void powerOff();
}

定义控制类的实现类

public class TvController implements PowerController {

    private TvState mTvState;

    private void setTvState(TvState tvState) {
        mTvState = tvState;
    }

    @Override
    public void powerOn() {
        setTvState(new PowerOnState());
        System.out.println("开机啦");
    }

    @Override
    public void powerOff() {
        setTvState(new PowerOffState());
        System.out.println("关机啦");
    }

    public void nextChannel() {
        mTvState.nextChannel();
    }

    public void prevChannel() {
        mTvState.prevChannel();
    }

    public void turnUp() {
        mTvState.turnUp();
    }

    public void turnDown() {
        mTvState.turnDown();
    }

}

调用

public static void main(String[] args) {
        TvController tvController = new TvController();
        tvController.powerOn();
        tvController.nextChannel();
        tvController.turnUp();
        tvController.powerOff();
        tvController.turnDown();
    }

输出结果

开机啦
下一个频道
增加音量
关机啦

状态模式

原文:https://www.cnblogs.com/milovetingting/p/12203789.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!