状态模式(java版)
来源:互联网 发布:个人知识管理系统java 编辑:程序博客网 时间:2024/06/15 15:09
1.引入
状态模式就是对象的状态改变时,同时也就改变其行为。而一般对于我们状态的改变都是采用条件语句来判断,然后不同的状态满足什么条件就执行相应的程序。但是如果对象的状态很复杂,就把不同对象的状态以类的形式表示。实际上就把复杂的逻辑判断进行简单化,以实现对各种状态类的解耦。
2.举例
生活中,我们有工作状态,睡眠状态,娱乐状态,我们对于不同的状态肯定会有不同的行为,如我们处于睡眠状态则肯定不会感到娱乐。所以我们肯定会有一个生活,然后里面有各种状态,而生活就是对状态进行管理。在生活中我们去切换不同的状态,对于不同的状态我们做不同的行为。所以说生活多姿多彩呢!
3.实现
--3.1抽象状态类:
public abstract class State {public abstract void personState();}
--3.2工作状态类:
public class WorkState extends State{@Overridepublic void personState() {// TODO Auto-generated method stubSystem.out.println("工作状态");}}
--3.3睡眠状态类:
public class SleepState extends State{@Overridepublic void personState() {// TODO Auto-generated method stubSystem.out.println("睡眠状态");}}
--3.4.娱乐状态类:
public class EntertainState extends State{@Overridepublic void personState() {// TODO Auto-generated method stubSystem.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.
对于状体模式的本身来说就是将对象状态之间进行分离,实现状态之间的解耦,减少了状态之间的相互依赖。
0 0
- 状态模式(java版)
- 大话设计模式之状态模式(java版实现)
- java设计模式-状态模式(State)
- java设计模式(八)状态模式
- Java状态模式(State模式)
- Java设计模式----状态模式(State)
- Java状态模式(State模式)
- java设计模式(十一)--状态模式
- Java设计模式(十) 备忘录模式 状态模式
- Java设计模式之行为型模式(状态模式)
- 状态模式(State)-----基于JAVA语言
- Java 状态模式
- java状态模式
- Java 状态模式(State)
- Java 状态模式
- Java状态模式(State)
- java状态模式
- java状态模式
- 网易有道2017内推编程题 队列操作(映射)
- 在ScrollView中加入listview后的处理
- LeetCode之Maximum Depth of Binary Tree(Java版)
- [TODO] LeetCode #363: Max Sum of Rectangle No Larger Than K
- Longest Substring with At Most Two Distinct Characters
- 状态模式(java版)
- JNDI 是什么(Java Naming and Directioy Interface)
- hust sci列表
- AndroidStudio——今日头条(可以实时获取数据的app)
- 看电影 【NOIP2016提高A组模拟9.3】
- 【NOIP2016提高A组模拟9.3】看电影
- (25)HTML5-初识jQuery
- 三极管放大电路基本原理
- leetcode----63. Unique Paths II