Java设计模式之状态模式
2017-04-20 20:44
225 查看
一、定义
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
二、角色
1 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。
2 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
3 具体状态(Concrete State):实现抽象状态定义的接口。
三、以电视机开关控制为例,写一个demo
1、抽象状态
2.具体状态1
3、具体状态2
4、上下文环境,在此处是一个状态控制的管理器
5、客户类
打印结果
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
二、角色
1 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。
2 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
3 具体状态(Concrete State):实现抽象状态定义的接口。
三、以电视机开关控制为例,写一个demo
1、抽象状态
package com.example.state; /** * 抽象状态类 * @author zeng * */ public interface TVState { //开机 public void turnOn(); //关机 public void turnOff(); //下一个频道 public void nextChanel(); //上一个频道 public void preChanel(); }
2.具体状态1
package com.example.state; public class PowerOn implements TVState { @Override public void turnOn() { System.out.println("开机"); } @Override public void turnOff() { System.out.println("关机"); } @Override public void nextChanel() { System.out.println("下一个频道"); } @Override public void preChanel() { System.out.println("上一个频道"); } }
3、具体状态2
package com.example.state; public class PowerOff implements TVState { @Override public void turnOn() { System.out.println("开机"); } @Override public void turnOff() { System.out.println("关机"); } @Override public void nextChanel() { System.out.println("请先开机"); } @Override public void preChanel() { System.out.println("请先开机"); } }
4、上下文环境,在此处是一个状态控制的管理器
package com.example.state; public class TVControl { private TVState tvState; private TVState turnOn,turnOff; public TVControl() { turnOn = new PowerOn(); turnOff = new PowerOff(); } public void turnOn() { tvState = turnOn; tvState.turnOn(); } public void turnOff() { tvState = turnOff; tvState.turnOff(); } public void nextChanel() { tvState.nextChanel(); } public void preChanel() { tvState.preChanel(); } }
5、客户类
package com.example.state; public class Client { public static void main(String[] args) { TVControl tvControl = new TVControl(); tvControl.turnOn(); tvControl.turnOff(); tvControl.nextChanel(); tvControl.turnOn(); tvControl.preChanel(); } }
打印结果
开机 关机 请先开机 开机 上一个频道
相关文章推荐
- java设计模式-状态模式(STATE)
- java设计模式-状态模式
- Java设计模式九:状态模式(State)
- java设计模式---状态模式
- java与设计模式之状态模式
- 设计模式解析和实现(C++, java)之二十--状态(state)模式
- 东子破解的java设计模式状态模式
- JAVA设计模式十二:--State(状态模式)
- 设计模式--行为模式--状态模式--Java
- java设计模式---状态模式
- java设计模式之状态设计模式
- java 设计模式实例 - 状态模式
- java设计模式之状态 模式State
- Java设计模式之二十三(状态模式)
- Java设计模式(10) —— 状态
- java设计模式-状态模式
- Java设计模式九:状态模式(State)
- java设计模式(八)状态模式
- java设计模式---状态模式
- Java 设计模式之状态模式