设计模式-状态模式
来源:互联网 发布:vs运行c语言 编辑:程序博客网 时间:2024/06/11 05:09
定义:又称状态对象模式,允许一个对象内部状态改变时,改变其行为胡模式。是一种对象的行为模式。
状态模式胡角色:(1)环境(Context)角色:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。此实例给出此环境对象的现有状态。(2)抽象状态角色:定义一个接口,封装一个环境对象特定状态对应的行为。(3)具体状态角色:每一个具体状态类都实现了环境对象的一个状态所对应的行为。
//环境角色 public class Context{ private State state;//持有抽象状态角色胡实例 public void setState(State state){ this.state = state; } //定义客户端感兴趣的接口 public void request(String param){ state.handle(param); } } //抽象状态角色 public interface State{ //状态对应的处理 public void handle(String param); } //具体状态角色 public class ConcreteStateA implements State{ @Override public void handle(String param){ System.out.println("ConcreteStateA handle :"+param); } } public class ConcreteStateB implements State{ @Override public void handle(String param){ System.out.println("ConcreteStateB handle :"+param); } } //客户端 public class Client{ public static void main(String[] args){ State state = new ConcreteStateB(); Context context = new Context(); context.setState(state); context.request("test"); } }
蓝球运动员投球状态:正常发挥,不正常发挥,超常发挥
//定义状态影响的行为(抽象状态角色) public interface State{ public void shot(); } //定义具体状态对应的具体行为 public class NormalState implements State{ private String name; public NormalState(String name){ this.name = name; } @Override public void shot(){ System.out.println(name+"正常发挥:投中1个!"); } } public class NonormalState implements State{ private String name; public NonormalState(String name){ this.name = name; } @Override public void shot(){ System.out.println(name+"不正常发挥:一个也没投中!!!"); } } public class SuperState implements State{ private String name; public SuperState(String name){ this.name = name; } @Override public void shot(){ System.out.println(name+"超常发挥:投中2个,好牛逼!!!"); } } //环境角色 public class Player{ private String name; //默认运动员为正常状态 public State state; public Player(String name){ this.name = name; state = new NormalState(this.name); } //在这里设置运动员真实的状态 public void setState(State state){ this.state = state; } public void shot(){ state.shot(); } public String getName(){ return name; } } //测试代码 public class ClientTest{ public static void main(String[] args){ Player player = new Player("张继科"); player.shot(); //张继科正常发挥 State state = new NonormalState(player.getName()); player.setState(state); player.shot();//张继科不正常发挥 State superState = new SuperState(player.getName()); player.setState(superState); player.shot();//张继科超常发挥 } }
状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。状态决定行为。状态模式中,环境类是持有状态的对象,状态模式就是将环境中的状态和与状态相关的行为抽象出去,使之可以独立变化。优点是新增状态时,易扩展,缺点是具体状态类可能会过多。
0 0
- 设计模式:状态模式
- 设计模式-----状态模式
- 设计模式 状态模式
- 设计模式 - 状态模式
- 设计模式---状态模式
- 设计模式-状态模式
- 设计模式:状态模式
- 设计模式 - 状态模式
- 设计模式-状态模式
- 设计模式--状态模式
- 设计模式-状态模式
- 设计模式:状态模式
- 设计模式-状态模式
- 设计模式-状态模式
- [设计模式]状态模式
- 设计模式 状态模式
- 设计模式--状态模式
- 设计模式--状态模式
- 阅读Github上App之总结
- Mac下使用github的基本步骤
- UIView
- 第一章 导言 Optix 光线跟踪编程指南
- Ubuntu命令行模式和图形界面模式切换
- 设计模式-状态模式
- 建邻接表的两种方式
- 网络通信中的数据链路层常见协议汇总
- Error creating bean with name '****'的解决方法
- jQuery对象与dom对象的转换$("#id")[0]
- UIEdgeInsetsMake 顺序
- Date、TimeStamp和Calendar的使用
- Rhino——java执行多种脚本语言
- Apache与Nginx的优缺点比较