赞
踩
状态模式可以应用于多种场景,下面是一些示例及其代码实现:
交通信号灯(红灯、绿灯、黄灯)根据当前状态切换到下一个状态。
// 状态接口 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(); // 输出: 红灯 - 请等待 } }
游戏中的角色根据经验值提升等级,不同等级有不同的行为。
// 状态接口 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(); // 输出: 高手玩家 - 双倍经验获取 } }
这两个示例展示了状态模式在不同场景下的应用。在第一个示例中,交通信号灯根据当前状态变化到下一个状态;在第二个示例中,游戏角色根据等级状态拥有不同的行为。状态模式使得状态的变化更加灵活和可管理,同时也使得代码更加清晰和易于维护。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。