状态模式(java版)
2016-09-04 15:32
465 查看
1.引入
状态模式就是对象的状态改变时,同时也就改变其行为。而一般对于我们状态的改变都是采用条件语句来判断,然后不同的状态满足什么条件就执行相应的程序。但是如果对象的状态很复杂,就把不同对象的状态以类的形式表示。实际上就把复杂的逻辑判断进行简单化,以实现对各种状态类的解耦。
2.举例
生活中,我们有工作状态,睡眠状态,娱乐状态,我们对于不同的状态肯定会有不同的行为,如我们处于睡眠状态则肯定不会感到娱乐。所以我们肯定会有一个生活,然后里面有各种状态,而生活就是对状态进行管理。在生活中我们去切换不同的状态,对于不同的状态我们做不同的行为。所以说生活多姿多彩呢!
3.实现
--3.1抽象状态类:
--3.2工作状态类:
--3.3睡眠状态类:
--3.4.娱乐状态类:
--3.5.生活类:
--3.6测试类:
结果:
工作状态
娱乐模式!
睡眠状态
---------------------------------------------------------------------------------------
4.总结
--4.1.
状态模式在开发中用到地方很多,如当用户看视频未登录叫离线态,则离线态相当于一种权限不能做些在线态的事情,所以离线态对应离线态的行为,而用户登录之后,属于在线态,也就对应在线态的行为。
--4.2.
对于状体模式的本身来说就是将对象状态之间进行分离,实现状态之间的解耦,减少了状态之间的相互依赖。
状态模式就是对象的状态改变时,同时也就改变其行为。而一般对于我们状态的改变都是采用条件语句来判断,然后不同的状态满足什么条件就执行相应的程序。但是如果对象的状态很复杂,就把不同对象的状态以类的形式表示。实际上就把复杂的逻辑判断进行简单化,以实现对各种状态类的解耦。
2.举例
生活中,我们有工作状态,睡眠状态,娱乐状态,我们对于不同的状态肯定会有不同的行为,如我们处于睡眠状态则肯定不会感到娱乐。所以我们肯定会有一个生活,然后里面有各种状态,而生活就是对状态进行管理。在生活中我们去切换不同的状态,对于不同的状态我们做不同的行为。所以说生活多姿多彩呢!
3.实现
--3.1抽象状态类:
public abstract class State { public abstract void personState(); }
--3.2工作状态类:
public class WorkState extends State{ @Override public void personState() { // TODO Auto-generated method stub System.out.println("工作状态"); } }
--3.3睡眠状态类:
public class SleepState extends State{ @Override public void personState() { // TODO Auto-generated method stub System.out.println("睡眠状态"); } }
--3.4.娱乐状态类:
public class EntertainState extends State{ @Override public void personState() { // TODO Auto-generated method stub System.out.println("娱乐模式!"); } }
--3.5.生活类:
//状态管理上下文 public class Life { private State state; public Life(State state){ this.state=state; } public State getState() { return state; } public void setState(State state) { this.state = state; } public void printState(){ if(state.getClass().equals(WorkState.class)){ state.personState(); }else if(state.getClass().equals(SleepState.class)){ state.personState(); }else{ state.personState(); } } }解释:在生活类中,将状态以构造器的方式传入,作为当前默认的状态,而setState方法用于改变状态,而printState则用于状态之间的切换。不同的状态实现其不同的行为。
--3.6测试类:
public class Test { public static void main(String[] args) { State workState=new WorkState(); Life ct=new Life(workState); ct.printState(); State entertainState=new EntertainState(); ct.setState(entertainState); ct.printState(); State sleepState=new SleepState(); ct.setState(sleepState); ct.printState(); } }
结果:
工作状态
娱乐模式!
睡眠状态
---------------------------------------------------------------------------------------
4.总结
--4.1.
状态模式在开发中用到地方很多,如当用户看视频未登录叫离线态,则离线态相当于一种权限不能做些在线态的事情,所以离线态对应离线态的行为,而用户登录之后,属于在线态,也就对应在线态的行为。
--4.2.
对于状体模式的本身来说就是将对象状态之间进行分离,实现状态之间的解耦,减少了状态之间的相互依赖。
相关文章推荐
- spring入门(四)【面向切面编程】
- Java对象的序列化
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo
- JAVA SE 学习第二天
- Java NIO:浅析I/O模型
- java List多字段排序
- 动态代理(分析和原理)
- 菜鸟笔记--Java通过Rserve调用R语言
- hibernate的executeWithNativeSession(HibernateCallbk())、execute(new HibernateCallback())无法对spring事务回滚
- 1、2、3、4四个数字,无重复的3位数
- 命令行运行java的时候总是提示:找不到或无法加载主类
- java保留两位小数
- Java基础知识笔记(一:修饰词、向量、哈希表)
- Java基础静态方法
- Java基础循环嵌套小结
- Java基础循环语句小结
- Java基础选择语句的类型
- Java基础思维导图大纲
- @Valid springMVC bean校验不起作用及如何统一处理校验
- myeclipse中java.lang.OutOfMemoryError: PermGen space解决方式