牛叔叔 的笔记

好好学习

2023-11-24 13:52

设计模式中状态模式

牛叔叔

JavaEE

(312)

(0)

收藏

当我们玩游戏时,通常会有不同的角色,每个角色可能有不同的状态,比如正常状态、受伤状态和死亡状态等。这个场景可以很好地用状态模式来进行设计。

在状态模式中,每个状态都是一个单独的类,并且角色对象持有对当前状态对象的引用。当角色对象需要改变状态时,它会委托给当前状态对象处理。下面以一个动作游戏为例来说明状态模式的应用。

首先,我们定义一个角色对象 Player,它有三个状态:NormalState(正常状态)、InjuredState(受伤状态)和 DeadState(死亡状态)。每个状态都要实现共同的方法 handleAction(),用于处理角色对象的行为。

// 抽象状态类public interface PlayerState {
    void handleAction();}// 正常状态类public class NormalState implements PlayerState {
    @Override
    public void handleAction() {
        System.out.println("执行正常状态下的行为");
    }}// 受伤状态类public class InjuredState implements PlayerState {
    @Override
    public void handleAction() {
        System.out.println("执行受伤状态下的行为");
    }}// 死亡状态类public class DeadState implements PlayerState {
    @Override
    public void handleAction() {
        System.out.println("执行死亡状态下的行为");
    }}// 角色类public class Player {
    private PlayerState currentState;

    public Player() {
        currentState = new NormalState();  // 初始状态为正常状态
    }

    public void setState(PlayerState state) {
        currentState = state;
    }

    public void handleAction() {
        currentState.handleAction();
    }}

现在,我们可以使用这些类来创建一个玩家角色,并根据其状态执行相应的行为。

public class Main {
    public static void main(String[] args) {
        Player player = new Player();

        player.handleAction();  // 输出:执行正常状态下的行为

        player.setState(new InjuredState());
        player.handleAction();  // 输出:执行受伤状态下的行为

        player.setState(new DeadState());
        player.handleAction();  // 输出:执行死亡状态下的行为
    }}

通过状态模式,我们可以将角色的不同状态封装成不同的类,使得代码更加清晰和可扩展。当需要增加新的状态时,只需要实现对应的状态类即可,而不需要修改现有的代码。这有助于实现高内聚、低耦合的设计。


0条评论

点击登录参与评论