状态模式可以应用于多种场景,下面是一些示例及其代码实现:
1. 交通信号灯
交通信号灯(红灯、绿灯、黄灯)根据当前状态切换到下一个状态。
// 状态接口
interface TrafficLightState {
void change(TrafficLight trafficLight);
}
// 具体状态:红灯
class RedLight implements TrafficLightState {
public void change(TrafficLight trafficLight) {
System.out.println("红灯 - 请等待");
trafficLight.setState(new GreenLight());
}
}
// 具体状态:绿灯
class GreenLight implements TrafficLightState {
public void change(TrafficLight trafficLight) {
System.out.println("绿灯 - 请通过");
trafficLight.setState(new YellowLight());
}
}
// 具体状态:黄灯
class YellowLight implements TrafficLightState {
public void change(TrafficLight trafficLight) {
System.out.println("黄灯 - 请小心");
trafficLight.setState(new RedLight());
}
}
// 上下文
class TrafficLight {
private TrafficLightState state;
public TrafficLight(TrafficLightState state) {
this.state = state;
}
public void setState(TrafficLightState state) {
this.state = state;
}
public void change() {
state.change(this);
}
}
// 客户端代码
public class TrafficLightDemo {
public static void main(String[] args) {
TrafficLight light = new TrafficLight(new RedLight());
light.change(); // 输出: 绿灯 - 请通过
light.change(); // 输出: 黄灯 - 请小心
light.change(); // 输出: 红灯 - 请等待
}
}
2. 游戏角色等级系统
游戏中的角色根据经验值提升等级,不同等级有不同的行为。文章来源:https://www.toymoban.com/news/detail-855946.html
// 状态接口
interface LevelState {
void play();
void doubleExperience();
}
// 具体状态:新手
class NoviceLevel implements LevelState {
public void play() {
System.out.println("新手玩家 - 正常经验获取");
}
public void doubleExperience() {
System.out.println("新手玩家 - 无法双倍经验");
}
}
// 具体状态:高手
class MasterLevel implements LevelState {
public void play() {
System.out.println("高手玩家 - 高速经验获取");
}
public void doubleExperience() {
System.out.println("高手玩家 - 双倍经验获取");
}
}
// 上下文
class Player {
private LevelState levelState;
public Player(LevelState levelState) {
this.levelState = levelState;
}
public void upgradeLevel(LevelState levelState) {
this.levelState = levelState;
}
public void play() {
levelState.play();
}
public void doubleExperience() {
levelState.doubleExperience();
}
}
// 客户端代码
public class GameDemo {
public static void main(String[] args) {
Player player = new Player(new NoviceLevel());
player.play(); // 输出: 新手玩家 - 正常经验获取
player.doubleExperience(); // 输出: 新手玩家 - 无法双倍经验
// 玩家升级
player.upgradeLevel(new MasterLevel());
player.play(); // 输出: 高手玩家 - 高速经验获取
player.doubleExperience(); // 输出: 高手玩家 - 双倍经验获取
}
}
这两个示例展示了状态模式在不同场景下的应用。在第一个示例中,交通信号灯根据当前状态变化到下一个状态;在第二个示例中,游戏角色根据等级状态拥有不同的行为。状态模式使得状态的变化更加灵活和可管理,同时也使得代码更加清晰和易于维护。文章来源地址https://www.toymoban.com/news/detail-855946.html
到了这里,关于设计模式:状态模式示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!