android 源码设计模式之--状态模式
1模式定义:
类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
2应用场景
1. 行为随状态改变而改变的场景。 2、条件、分支语句的代替者。
何时使用:代码中包含大量与对象状态有关的条件语句。
如何解决:将各种具体的状态类抽象出来。
3组成部分
1 State 接口。2 各个实现了 State 接口的实体状态类。3 一个带有某个状态的状态封类。4 我们的客户类(测试类)
4 示例场景说明
5 示例代码
//状态接口
Java
public interface XiaoMingtState {
public void currentState();
}
//具体状态类 吃饭
Java
public class ChiFanState implements XiaoMingtState {
@Override
public void currentState() {
// TODO Auto-generated method stub
System.out.println("吃饭");
}
}
//具体状态类 发呆
Java
public class FaDaiState implements XiaoMingtState {
@Override
public void currentState() {
// TODO Auto-generated method stub
System.out.println("发呆");
}
}
//具体状态类 玩游戏
Java
public class PlayGameState implements XiaoMingtState {
@Override
public void currentState() {
// TODO Auto-generated method stub
System.out.println("玩游戏");
}
}
//具体状态类 睡觉
Java
public class ShuijiaoState implements XiaoMingtState{
@Override
public void currentState() {
// TODO Auto-generated method stub
System.out.println("睡觉");
}
}
状态封装类
Java
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();
}
}
客户类
Java
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
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论