设计模式

状态模式(State)

2020-07-22  本文已影响0人  秀儿2020

定义

允许一个对象在其内部状态改变时,改变他的行为,对象看起来似乎是修改了他的类。

本质

根据状态来分离和选择行为

登场角色

示例代码

/**
 * 状态
 * 电视状态接口,定义了电视操作
 */
public interface TvState {
    public void nextChange();
    public void prevChange();
    public void turnUp();
    public void turnDown();
}


/**
 * 具体的状态1
 */
public class PowerOnState implements TvState{
    @Override
    public void nextChange() {
        System.out.println("上一个频道");
    }

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

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

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




/**
 * 具体的状态2
 */
public class PowerOffState implements TvState{
    @Override
    public void nextChange() {

    }

    @Override
    public void prevChange() {

    }

    @Override
    public void turnUp() {

    }

    @Override
    public void turnDown() {

    }
}


/**
 * 电视遥控器
 */
public class TvController implements PowerController{
    private TvState tvState;

    public void setTvState(TvState tvState) {
        this.tvState = tvState;
    }

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

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

    public void nextChange() {
        tvState.nextChange();
    }

    public void prevChange() {
        tvState.prevChange();
    }

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

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



public class Client {
    public static void main(String[] args){
        TvController tvController = new TvController();
        //设置开机状态
        tvController.powerOn();
        tvController.nextChange();//下一个频道
        tvController.turnUp(); //调高音量
        //设置关机状态
        tvController.powerOff();
        //调低音量,此时不会生效
        tvController.turnDown();
    }
}

运行结果

开机啦
上一个频道
调高音量
关机啦

功能

分离状态的行为,通过维护状态的变化,来调用不同的状态对应的不同实现。状态和行为是相关联的,他们的关系可以描述为:状态决定行为。

由于状态是在运行期被改变的,因此行为也会在运行期根据状态的改变而改变,看起来,同一个对象,在不同的运行时刻,行为是不是不一样的,就像是类被修改了一样。

优点

缺点

何时使用

上一篇 下一篇

猜你喜欢

热点阅读