设计模式:状态模式示例

这篇具有很好参考价值的文章主要介绍了设计模式:状态模式示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

状态模式可以应用于多种场景,下面是一些示例及其代码实现:

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. 游戏角色等级系统

游戏中的角色根据经验值提升等级,不同等级有不同的行为。

// 状态接口
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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式】用Java实现状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态发生改变时改变其行为。该模式将对象的行为包装在不同的状态类中,使得对象的行为可以根据其当前状态动态改变。 状态模式通常由以下几个角色组成: 环境类(Context) :环境类是拥有状态的对象,它将会根据当前状

    2024年02月10日
    浏览(26)
  • 【十五】设计模式~~~行为型模式~~~状态模式(Java)

    【学习难度:★★★☆☆,使用频率:★★★☆☆】 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互

    2024年02月07日
    浏览(32)
  • 【Java 设计模式】行为型之状态模式

    状态模式(State Pattern)是一种行为型设计模式,用于通过将对象的行为封装到不同的状态类中,使得对象在不同的状态下具有不同的行为。状态模式允许对象在内部状态发生改变时改变其行为,而无需修改其代码。在本文中,我们将深入研究Java中状态模式的定义、结构、使

    2024年01月24日
    浏览(38)
  • JAVA 23种设计模式示例

    目录 一.单例模式 二.工厂方法模式 三.抽象工厂模式 四.建造者模式 五.原型模式 六.享元模式 七.门面模式 八.适配器模式 九.装饰者模式 十.策略模式 十一.模板方法模式 十二.观察者模式 十三.责任链模式 十四.代理模式 十五.桥接模式 十六.组合模式 十七.命令模式 十八.状态

    2024年02月13日
    浏览(28)
  • 设计模式-外观模式在Java中的使用示例

    外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统 之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。 示例 自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自

    2024年02月17日
    浏览(37)
  • 设计模式-建造者模式在Java中使用示例

    复杂对象的组装与创建 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。 如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。 建造者模式又称为生成器模式,它是一种较为复杂

    2024年02月16日
    浏览(36)
  • 【拆解设计模式】工厂方法及其Java示例

    在我们的编程世界中,设计模式就如同一盏指路明灯,引领我们走向优雅、高效的代码之路。设计模式是一种在特定环境下解决特定问题的优秀方案,它是前人的经验总结,是我们编程的宝贵财富。 1.1 设计模式的定义和分类 设计模式,简单来说,就是一套被反复使用、多数

    2024年01月20日
    浏览(43)
  • Java设计模式:深入解析与应用示例

    设计模式是一种在特定上下文中反复出现的可重用解决方案,用于处理软件设计中常见的问题。掌握设计模式不仅可以帮助我们编写出更优雅、更易于理解和维护的代码,而且也是Java面试中的常考知识点。在本文中,我们将探讨几种常见的设计模式,包括它们的定义、使用场

    2024年02月09日
    浏览(30)
  • 设计模式-职责链模式在Java中使用示例-采购审批系统

    采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元) 的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元) 的采购单,50万元及以上的采购单

    2024年02月16日
    浏览(25)
  • Java设计模式之行为型-状态模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类,状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包