android 源码设计模式之--状态模式

sancaiodm Android应用 2021-10-13 916 0

1模式定义:

类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。


2应用场景

1. 行为随状态改变而改变的场景。 2、条件、分支语句的代替者。

何时使用:代码中包含大量与对象状态有关的条件语句。

如何解决:将各种具体的状态类抽象出来。


3组成部分

1 State 接口。2 各个实现了 State 接口的实体状态类。3 一个带有某个状态的状态封类。4 我们的客户类(测试类)

20190806204938332.png

 4 示例场景说明


 


5 示例代码

//状态接口

public interface XiaoMingtState {	
         public void currentState();
}


//具体状态类 吃饭

public class ChiFanState implements XiaoMingtState {
	@Override
	public void currentState() {
		// TODO Auto-generated method stub
		System.out.println("吃饭");
	}
}

 

//具体状态类 发呆

public class FaDaiState implements XiaoMingtState { 
	@Override
	public void currentState() {
		// TODO Auto-generated method stub
		System.out.println("发呆");
	}
}

 

//具体状态类 玩游戏

public class PlayGameState implements XiaoMingtState {
	@Override
	public void currentState() {
		// TODO Auto-generated method stub
		System.out.println("玩游戏");
	}
}

 

//具体状态类 睡觉

public class ShuijiaoState implements  XiaoMingtState{
	@Override
	public void currentState() {
		// TODO Auto-generated method stub
		System.out.println("睡觉");
	}
}

状态封装类

public class StateContext {
	public XiaoMingtState mXMstate;
	public StateContext() {
		// TODO Auto-generated constructor stub
	}
        //设置当前状态
	public void setXiaoMingtState(XiaoMingtState state){
		mXMstate = state;
	}
	//获取当前状态
	public XiaoMingtState getXiaoMingtState(){
		return mXMstate;
	}
	
	public void pritState(){
		mXMstate.currentState();
	}
}

客户类

public class ZhuangtaiMain {
	public static void main(String[] args) {
		ShuijiaoState mshuijiao = new ShuijiaoState();
		 StateContext statcontext = new StateContext();
		 statcontext.setXiaoMingtState(mshuijiao);
		 statcontext.getXiaoMingtState().currentState();
		 		 
		 ChiFanState mchifan = new ChiFanState();
		 statcontext.setXiaoMingtState(mchifan);
		 statcontext.getXiaoMingtState().currentState();
	}
}

 

/----结果打印--------------------------------------

睡觉

吃饭 


参考文献:

https://www.cnblogs.com/ZhangHaoShuaiGe/p/8000451.html

https://www.cnblogs.com/anni-qianqian/p/5602110.html


评论