Java设计模式之状态模式
来源:互联网 发布:单片机程序实验流程图 编辑:程序博客网 时间:2024/05/19 12:40
状态模式将各个状态所对应的操作分离开来,即对于不同的状态,由不同的子类实现具体操作,不同状态的切换由子类实现,当发现传入参数不是自己这个状态所对应的参数,则自己给Context类切换状态;而策略模式是直接依赖注入到Context类的参数进行选择策略,不存在切换状态的操作练习
状态模式适用于各个状态之间的切换场景模式下(状态切换判断)。--可用状态模式
判断的值与改变的状态无关(一般的状态判断)
用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。每种状态为一个类
● 环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。
● 抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定的状态所对应的行为。
● 具体状态(ConcreteState)角色:每一个具体状态类都实现了环境(Context)的一个状态所对应的行为。
以下为例子,红绿灯3种状态,当红灯时转换状态为绿灯,绿灯转为黄灯,黄灯转为红灯
package com.huawei.state;/** * State需要两种类型实体参与:state manager 状态管理器 ,就是开关 ,如上面例子的Context实际就是一个state manager, 在state manager中有对状态的切换动作.用抽象类或接口实现的父类,,不同状态就是继承这个父类的不同子类. * @author Administrator * */public class Context { private State state = null; private String color = null; public Context(State state,String color){this.state = state;this.color = color; } public void change() { state.changeColor(this); } public State getState() {return state;}public void setState(State state) {this.state = state;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public static void main(String[] args) {Context c2 = new Context(new yellowClass(),"yellow");c2.change();System.out.println(c2.getColor());c2.change();System.out.println(c2.getColor());c2.change();System.out.println(c2.getColor());c2.change();System.out.println(c2.getColor());c2.change();System.out.println(c2.getColor());c2.change();System.out.println(c2.getColor());c2.change();/** * 输出结果 *///red//green//yellow//red//green//yellow}}interface State{void changeColor(Context Context);}class GreenClass implements State{@Overridepublic void changeColor(Context Context) {// TODO Auto-generated method stubif(Context.getColor()!=null&&Context.getColor().equals("green")){Context.setState(new yellowClass());Context.setColor("yellow");}}}class redClass implements State{@Overridepublic void changeColor(Context Context) {// TODO Auto-generated method stubif(Context.getColor()!=null&&Context.getColor().equals("red")){Context.setState(new GreenClass());Context.setColor("green");}}}class yellowClass implements State{@Overridepublic void changeColor(Context Context) {// TODO Auto-generated method stubif(Context.getColor()!=null&&Context.getColor().equals("yellow")){Context.setState(new redClass());Context.setColor("red");}}}
阅读全文
0 0
- java设计模式之状态设计模式
- 深入浅出Java设计模式之状态模式
- Java设计模式之State(状态模式)
- java设计模式之状态 模式State
- java设计模式之状态模式
- Java 设计模式之状态模式
- java与设计模式之状态模式
- Java设计模式泛型化之状态模式
- Java设计模式之状态模式
- Java设计模式之状态模式
- java 设计模式之状态模式
- 设计模式之状态模式 --- Java
- Java设计模式之状态模式
- 《Java设计模式》之状态模式
- JAVA设计模式之状态模式
- Java设计模式之状态模式
- java设计模式之状态模式
- Java设计模式之状态模式
- 数据储存方式
- 文章标题
- Spring Cloud Config Server
- 百度地图快速解决所有SDK中key验证失败,log显示230错误的问题
- bzoj1864: [Zjoi2006]三色二叉树
- Java设计模式之状态模式
- servlet相关
- 机器人技术(10)AtdRobot读取体感相机XtionProLive教程
- 分析usb驱动框架(usb-skeleton)
- PAT甲级 1018 没有AC,也不想重做这题
- (转)从17家顶级基金退出情况中反思投资机构退出之道
- 两个txt文件通过某一字段关联
- 7.5训练赛 反思加总结
- java访问权限修饰符public protected friendly private用法总结