状态模式

来源:互联网 发布:随意定位软件 编辑:程序博客网 时间:2024/06/11 04:10

1类图

这里写图片描述

2定义:

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

3应用场景

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

3.2 代码中有大量与状态有关的语句。

4电视状态接口

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

5关机状态

public class PowerOffState implements TvState {    @Override    public void nextChannel() {        // TODO Auto-generated method stub    }    @Override    public void prevChannel() {        // TODO Auto-generated method stub    }    @Override    public void turnUp() {        // TODO Auto-generated method stub    }    @Override    public void turnDown() {        // TODO Auto-generated method stub    }}

6开机状态

public class PowerOnState implements TvState {    @Override    public void nextChannel() {        // TODO Auto-generated method stub        System.out.println("下一频道");    }    @Override    public void prevChannel() {        // TODO Auto-generated method stub        System.out.println("上一频道");    }    @Override    public void turnUp() {        // TODO Auto-generated method stub        System.out.println("调高音量");    }    @Override    public void turnDown() {        // TODO Auto-generated method stub        System.out.println("调低音量");    }}

7电源接口

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

8遥控器类似于context

public class TvController implements PowerController {    TvState mTvState;    public void setmTvState(TvState mTvState) {        this.mTvState = mTvState;    }    @Override    public void powerOn() {        // TODO Auto-generated method stub        setmTvState(new PowerOnState());        System.out.println("开机");    }    @Override    public void powerOff() {        // TODO Auto-generated method stub        setmTvState(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();    }}

9测试

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