Java--设计模式-22-状态模式

简介: 状态模式(State Pattern)就是一个对象的行为会随内部状态变化而发生改变。也属于行为型模式。

状态模式(State Pattern)就是一个对象的行为会随内部状态变化而发生改变。也属于行为型模式。

       在代码开发中,我们有时会出现很多的条件语句结构,出现大量十分难看的if else。这时就可以使用状态模式,将大量的状态抽象出来。

       昨天游戏是写了存档和还原,还是用游戏为例,我们在玩一个游戏时,可以有开始游戏按钮、暂停游戏按钮、继续游戏按钮、结束游戏按钮。用普通的方法实现:

if(开始){
开始游戏。。。} elseif(继续) {
继续游戏。。。} elseif(结束){
结束游戏。。。}

如何用状态模式来实现呢?

       我们将不同按钮的状态抽象出来,将动作放到对应的状态类中。

image.png

代码实现:

一、游戏类,注入了类型接口

packagecom.xing.design.state;
/*** 游戏类,备忘录保存游戏进度,保存的就是这个类的进度* @author xing*/publicclassGame {
/*** 游戏状态类型,随不同的状态类而改变*/privateStringisStart;
/*** 状态类注入*/privateStatestate;
publicStringgetIsStart() {
returnisStart;
  }
publicvoidsetIsStart(StringisStart) {
this.isStart=isStart;
  }
publicvoidsetState(Statestate2) {
this.state=state2;
state.action(this);
System.out.println("当前游戏状态:"+this.isStart);
  }
}


二、抽象出状态类系列,包含状态接口及多个状态类

1.接口

packagecom.xing.design.state;
/***  状态接口* @author xing*/publicinterfaceState {
/***  当前状态下该游戏的操作* @param game*/publicvoidaction(Gamegame);
}

2.状态类

packagecom.xing.design.state;
/*** 游戏状态类 开始* @author xing*/publicclassStartStateimplementsState{
@Overridepublicvoidaction(Gamegame) {
game.setIsStart("游戏中。。。");
  }
}
packagecom.xing.design.state;
/*** 游戏状态类 结束* @author xing*/publicclassEndStateimplementsState{
@Overridepublicvoidaction(Gamegame) {
game.setIsStart("Game over");
  }
}

三、编写main方法测试、

packagecom.xing.design.state;
publicclassStateDemo {
publicstaticvoidmain(String[] args) {
Gamegame=newGame();
System.out.println("点击开始按钮时setState为StartState,让游戏处于游戏中");
game.setState(newStartState());
System.out.println("点击结束按钮时setState为EndState,让游戏完毕");
game.setState(newEndState());
  }
}

四、测试结果

image.png

       我们传入不同的状态类,从而改变了游戏的状态类型。

       如果要加状态,比如加个继续游戏的状态,只要实现状态接口直接使用就好:

packagecom.xing.design.state;
/*** 游戏状态类 继续* @author xing*/publicclassAgainStateimplementsState{
@Overridepublicvoidaction(Gamegame) {
game.setIsStart("继续游戏");
  }
}

image.png


总结:

       如果你的代码中出现了大片的if else 逻辑,那么就可以使用状态模式,将状态抽象成接口,并将不同的分支中的动作放到不同的状态类中去,使代码高大上。


END

目录
相关文章
|
14天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
31 0
[Java]23种设计模式
|
30天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
2月前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
2月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
2月前
|
设计模式 存储 安全
Java设计模式-组合模式(13)
Java设计模式-组合模式(13)