状态模式(java版)

1.引入

状态模式就是对象的状态改变时,同时也就改变其行为。而一般对于我们状态的改变都是采用条件语句来判断,然后不同的状态满足什么条件就执行相应的程序。但是如果对象的状态很复杂,就把不同对象的状态以类的形式表示。实际上就把复杂的逻辑判断进行简单化,以实现对各种状态类的解耦。

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.

对于状体模式的本身来说就是将对象状态之间进行分离,实现状态之间的解耦,减少了状态之间的相互依赖。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值