JAVA状态模式2
来源:互联网 发布:预科生的贩毒网络豆瓣 编辑:程序博客网 时间:2024/05/18 17:26
原文链接: http://blog.csdn.net/janice0529/article/details/41054673
一、概述
当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化。状态模式是一种对象行为型模式。
二、适用场景
用于解决系统中复杂对象的多种状态转换以及不同状态下行为的封装问题。简单说就是处理对象的多种状态及其相互转换。
三、UML类图
四、参与者
1>、AbstractState(抽象状态类):
在抽象状态类中定义申明了不同状态下的行为抽象方法,而由子类(不同的状态子类)中实现不同的行为操作。
2>、ConcreteState(实现具体状态下行为的状态子类):
抽象状态类的子类,每一个子类实现一个与环境类(Context)的一个状态相关的行为,每一个具体的状态类对应环境的一种具体状态,不同的具体状态其行为有所不同。
3>、Context(拥有状态对象的环境类):
拥有状态属性,因环境的多样性,它可拥有不同的状态,且在不同状态下行为也不一样。在环境类中维护一个抽象的状态实例,这个实例定义当前环境的状态(setState()方法),而将具体的状态行为分离出来由不同的状态子类去完成。
五、用例学习
1、抽象状态类:State.Java
2、具体状态子类A:ConcreteStateA.java
3、具体状态子类B:ConcreteStateB.java
4、拥有状态对象的环境类:Context.java
5、测试客户端调用类:Client.java
6、程序运行结果:
六、扩展
状态模式中 关于状态的切换有两种不同的实现方式
方式一:状态的改变/切换 在环境类中实现。 如上面的用例代码Context类中的checkState()方法。
方式二:状态的改变/切换 在具体的状态子类中实现。
实现步骤如下:
1> 在环境类Context类中 初始化一个状态实例对象,并将环境Context对象作为子类状态的构造参数传递到具体的状态子类实例中。
如在Context.java类中:
2> 在具体的子类状态类中根据构造进来的context对象,通过调用context对象的属性值进行业务逻辑判断 进行状态的检查和切换。
如在 具体的状态子类ConcreteStateA.java类中:
- JAVA状态模式2
- Java 状态模式
- java状态模式
- Java 状态模式(State)
- Java 状态模式
- Java状态模式(State)
- java状态模式
- java状态模式
- java状态模式
- java状态模式
- JAVA-状态设计模式
- Java 状态模式
- Java 状态模式
- java状态模式
- Java中的状态模式
- 状态模式(java实现)
- Java模式 - 状态模式(State)
- java设计模式-状态模式
- 剑指offer——滑动窗口的最大值(好题,数据结构)
- JavaScript内置对象
- Hadoop,HA高可用集群
- flashsim源码阅读7-7笔记
- vim ctrl+s 就死
- JAVA状态模式2
- mysql中timestamp数据类型
- java synchronized类锁,对象锁详解(转载)
- Maven使用tomcat7运行报错:Unable to determine URL for WEB-INF/classes
- [Leetcode] 275. H-Index II 解题报告
- for in和for of区别
- HttpUrlConnetionGet
- ajax异步上传文件
- cannot change version of project facet Dynamic Web Module to 3.