设计模式之:状态模式(State Pattern)

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

状态模式(State Pattern)

状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为。这种模式通过把状态的变化逻辑分布到State的子类之间,减少了相互间的依赖,使得状态的切换更加清晰。

状态模式的关键是将那些会随着状态改变而改变的行为抽离出来,使得状态和行为可以独立变化,不同状态下的行为可以分别管理和修改,增加新的状态或者改变状态间的转换逻辑变得更加容易。

使用状态模式的好处:
  • 封装了转换规则:状态之间的转换操作被封装在状态类中,易于修改和扩展。
  • 消除了庞大的条件分支语句:状态模式通过多态性来消除原本过多的条件分支语句。
  • 将状态的逻辑与对象的其它行为分离:这有助于集中处理对象在某一状态下的行为。

示例:简单的工作状态切换

假设我们有一个工作任务(Task)对象,这个对象有几个状态:New(新创建的任务),InProgress(正在进行的任务),Completed(已完成的任务)。我们可以使用状态模式来设计这个场景。

步骤 1:定义状态接口

首先,定义一个状态接口和实现该接口的具体状态类。

interface State {
    void proceed(Task task);
}

class New implements State {
    public void proceed(Task task) {
        System.out.println("Task is starting.");
        task.setState(new InProgress());
    }
}

class InProgress implements State {
    public void proceed(Task task) {
        System.out.println("Task is in progress.");
        task.setState(new Completed());
    }
}

class Completed implements State {
    public void proceed(Task task) {
        System.out.println("Task is already completed.");
    }
}
步骤 2:创建 Context 类

然后,创建包含状态的Task类。

class Task {
    private State state;

    public Task() {
        // 任务默认状态为 New
        this.state = new New();
    }

    public void setState(State state) {
        this.state = state;
    }

    public void proceed() {
        state.proceed(this);
    }
}
步骤 3:使用状态模式

最后,演示如何使用状态模式来改变Task对象的状态。

public class StatePatternDemo {
    public static void main(String[] args) {
        Task task = new Task();

        task.proceed(); // Task is starting.
        task.proceed(); // Task is in progress.
        task.proceed(); // Task is already completed.
    }
}

在这个示例中,Task对象的行为随着其内部状态的改变而改变,而且状态的变更逻辑被封装在状态对象内部。这样,如果未来需要添加新的状态或者改变状态转换的逻辑,我们只需要修改或添加相应的状态类,而不需要触及到Task类的内部逻辑,这就是使用状态模式的好处。文章来源地址https://www.toymoban.com/news/detail-831741.html

到了这里,关于设计模式之:状态模式(State Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【设计模式——学习笔记】23种设计模式——状态模式State(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    请编写程序完成APP抽奖活动具体要求如下: 假如每参加一次这个活动要扣除用户50积分,中奖概率是10% 奖品数量固定,抽完就不能抽奖 活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完,活动的四个状态转换关系图如下 一开始的状态为“不能抽奖”,当扣除50积分

    2024年02月12日
    浏览(45)
  • 3.8设计模式——State 状态模式(行为型)

    允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 Context(上下文)定义客户感兴趣的接口;维护一个ConcreteState子类的实例,这个实例定义当前状态。 State(状态)定义一个接口以封装与Context的一个特定状态相关的行为。 ConcreteState(具体状态

    2024年04月26日
    浏览(34)
  • 设计模式之状态模式(State)的C++实现

    在组件功能开发过程中,某些对象的状态经常面临变化,不同的状态,其对象的操作行为不同。比如根据状态写的if else条件情况,且这种条件变化是经常变化的,这样的代码不易维护。可以使用状态模式解决这类问题。状态模式是将状态值抽象成一个基类,将不同状态下的操

    2024年02月12日
    浏览(43)
  • C++设计模式_18_State 状态模式

    State和Memento被归为“状态变化”模式。 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案。 State Memento

    2024年02月06日
    浏览(36)
  • 《游戏编程模式》学习笔记(七)状态模式 State Pattern

    允许对象在当内部状态改变时改变其行为,就好像此对象改变了自己的类一样。 在书的示例里要求你写一个人物控制器,实现跳跃功能 直觉上来说,我们代码会这么写: 可是这么写不对,因为人物本身应该只能跳一次,这样写的话人物就可以无限按B实现跳跃了。我们加一个

    2024年02月11日
    浏览(46)
  • Java设计模式—组合模式(Composite Pattern)

            组合模式(Composite),将对象组合成树形结构以表示\\\'部分-整体\\\'的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 MenuComponent  抽象类:定义了菜单组件的基本行为,包括打印名称和管理子元素的方法。 Menu  类:表示菜单,可以包含其他

    2024年04月15日
    浏览(46)
  • Java设计模式之建造者模式详解(Builder Pattern)

    在日常的开发工作中,我们常常需要创建一些复杂的对象。这些对象可能包含许多不同的属性,并且这些属性的初始化过程可能相当复杂。在这种情况下,建造者模式是一种非常有用的设计模式,因为它允许我们分步骤地创建复杂的对象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    浏览(44)
  • Java设计模式之过滤器模式(Filter Pattern)

    过滤器模式(Filter Pattern)是一种常用的设计模式,它用于通过一系列条件来过滤对象集合,并将满足条件的对象保留下来。该模式可以帮助我们在不修改原始对象集合的情况下,根据特定的条件对集合进行筛选和处理。 在过滤器模式中,通常有三个核心角色: 过滤器接口(

    2024年02月07日
    浏览(44)
  • Java设计模式-状态模式

    在软件开发领域,设计模式是一组经过验证的、被广泛接受的解决问题的方案。其中之一是状态模式,它提供了一种优雅的方式来管理对象的不同状态。 状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变其行为。状态模式将对象的行为封装在不同的状态

    2024年02月06日
    浏览(44)
  • java设计模式之状态模式

    基本介绍 状态模式:它主要是用来解决对象在多种状态转换时,需要对外输出不同的行为的问题,状态和行为是一一对应的,状态之间可以相互转换。 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。 原理类图 说明: Context 类为环境角色,

    2024年02月20日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包