软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式

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

五、状态模式

概念

与策略模式类似,状态模式将不同状态下的行为封装在不同的类中,每个类代表一个状态

状态模式的组成

  1. Context:定义了与客户程序的接口,它保持了一个concreteState的代表现在状态的实例
  2. State:定义了状态接口,它的各个子类封装了在各种不同状态下的行为
  3. ConcreteState子类:封装了在各种不同状态下的行为

类图

软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui
软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui
软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui

代码

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态发生变化时改变其行为,使得对象在不同状态下具有不同的行为。状态模式通过将状态封装成独立的类,并将状态之间的转换逻辑抽象出来,使得状态的变化对于使用者来说是透明的。

下面是一个简单的状态模式的代码示例,以说明其工作原理:

// 状态接口
interface State {
    void handleState();
}

// 具体状态类:状态A
class ConcreteStateA implements State {
    public void handleState() {
        System.out.println("执行状态A的行为");
    }
}

// 具体状态类:状态B
class ConcreteStateB implements State {
    public void handleState() {
        System.out.println("执行状态B的行为");
    }
}

// 上下文类
class Context {
    private State currentState;

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

    public void performAction() {
        currentState.handleState();
    }
}

// 示例
public class Main {
    public static void main(String[] args) {
        // 创建状态对象
        State stateA = new ConcreteStateA();
        State stateB = new ConcreteStateB();

        // 创建上下文对象
        Context context = new Context();

        // 设置初始状态为状态A
        context.setState(stateA);

        // 执行行为
        context.performAction();  // 输出:执行状态A的行为

        // 切换到状态B
        context.setState(stateB);

        // 执行行为
        context.performAction();  // 输出:执行状态B的行为
    }
}

在上面的示例中,状态模式涉及三个主要角色:

  • 状态接口(State):定义了一个共同的接口,该接口表示一个状态,并声明了该状态下的行为。
  • 具体状态类(ConcreteState):实现了状态接口,表示具体的状态,每个具体状态类实现自己的行为逻辑。
  • 上下文类(Context):持有一个当前状态的引用,并调用当前状态的方法来执行相应的行为。

通过将状态封装成独立的类,并在上下文类中使用状态对象来执行行为,状态模式实现了状态和行为之间的解耦,使得状态的变化对于上下文类和使用者来说是透明的。在示例中,上下文类的行为会根据当前状态的不同而发生变化。

状态模式的优点包括:

  • 将状态转换逻辑封装在状态类中,使得新增或修改状态变得简单,符合开闭原则。
  • 避免了大量的条件语句,使代码结构清晰,易于理解和维护。
  • 将状态的变化与具体的行为分离,使得状态变化不会影响到其他部分的代码。

总之,状态模式可以提供一种简洁的方式来处理对象的状态变化,并将状态的行为与上下文类解耦,使得代码更加可扩展和易于维护。它在需要根据对象状态改变行为的场景中具有很好的应用价值。

策略模式与状态模式

策略模式(Strategy Pattern)和状态模式(State Pattern)是两种不同的行为型设计模式,它们都用于解决对象行为的变化和动态切换的问题,但在实现方式和应用场景上存在一些差异。

  • 策略模式关注的是不同算法或策略的替换和选择,它将每个策略封装在独立的类中,并使得这些策略对象可以相互替换,从而使得客户端可以在运行时选择不同的策略对象。策略模式通过封装不同的算法,使得算法可以独立于使用它们的客户端而变化。在策略模式中,客户端决定使用哪个策略,然后将控制权交给相应的策略对象。

  • 状态模式关注的是对象的状态变化,并在不同状态下提供不同的行为。它通过将对象的状态封装在独立的状态类中,并使得状态对象可以相互切换,从而实现不同状态下的不同行为。状态模式的关键在于将状态的切换和行为的实现分离开来,从而使得客户端可以根据对象的状态来选择相应的行为。在状态模式中,状态的切换是由上下文对象来控制的,上下文对象根据当前的状态选择相应的行为。

  • 虽然策略模式和状态模式都涉及到对象行为的变化和动态切换,但它们的重点和应用场景有所不同。策略模式主要用于选择和替换算法或策略,适用于需要在运行时根据不同情况选择不同算法的场景。而状态模式主要用于管理对象的状态变化和相应的行为切换,适用于对象具有多个状态,且每个状态下的行为有所不同的场景。

需要注意的是,策略模式和状态模式都可以提高代码的灵活性和可维护性,通过将变化的部分封装起来,使得变化不会影响到其他部分的代码。根据具体的需求和设计目标,选择合适的设计模式来解决问题是很重要的。

交通信号控制灯的实例

软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui
软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui
软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui
软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui

课程作业

软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui
软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui

软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui
软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式,软件设计模式与体系结构,设计模式,状态模式,ui文章来源地址https://www.toymoban.com/news/detail-535464.html

到了这里,关于软件设计模式与体系结构-设计模式-行为型软件设计模式-状态模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 中级软件设计师备考---计算机组成与体系结构1

    对于n位二进制数,原码、反码和补码的表示范围如下: 原码:用最高位表示符号位,0表示正数,1表示负数。n位二进制数的原码表示范围为:-(2 n-1 -1) ~ 2 n-1 -1。 反码:正数的反码与原码相同,负数的反码是将原码中除符号位外的所有位取反。n位二进制数的反码表示范围

    2023年04月09日
    浏览(39)
  • 【软件设计师暴击考点】计算机组成原理与体系结构高频考点暴击系列【一】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : 软件设计师考点暴击 下午题 ⭐【软件设计师暴击考点】下午题高频考点暴击系列 上午题目录 进入专栏浏览:

    2024年02月10日
    浏览(31)
  • 软件工程(十五) 行为型设计模式(一)

    简要说明 通过多个对象处理的请求,减少请求的发送者与接收者之间的耦合。将接受对象 链接 起来,在链中传递请求,直到有一个对象处理这个请求。 速记 传递职责 类图如下 由类图可以比较容易的看出来,其实就是自己关联自己,形成了一个链,并且自己有不同的

    2024年02月11日
    浏览(36)
  • 软件工程(十八) 行为型设计模式(四)

    简要说明 允许一个对象在其内部改变时改变它的行为 速记 状态变成类 类图如下 状态模式主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。比如订单从待付款到待收货的咋黄台发生变化,执行的逻辑是不一样的。 所以我们将状态抽象为一个接口

    2024年02月11日
    浏览(40)
  • 软件工程(十七) 行为型设计模式(三)

    简要说明 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 速记 联动,广播消息 类图如下 基于上面的类图,我们来实现一个监听器。类图中的Subject对应我们的被观察对象接口(IObservable),Observer对应我们

    2024年02月11日
    浏览(32)
  • C++面试:单例模式、工厂模式等简单的设计模式 & 创建型、结构型、行为型设计模式的应用技巧

            理解和能够实现基本的设计模式是非常重要的。这里,我们将探讨两种常见的设计模式:单例模式和工厂模式,并提供一些面试准备的建议。 目录 单例模式 (Singleton Pattern) 工厂模式 (Factory Pattern) 面试准备  1. 理解设计模式的基本概念 2. 掌握实现细节 3. 讨论优缺

    2024年02月01日
    浏览(52)
  • 基于体系结构架构设计-架构真题(十五)

    基于体系结构开发设计(Architecture-Base Software Design)ABSD,是指构成体系结构的()组合驱动,ABSC方法是一个自项向下、递归细化的方法,软件系统的体系结构通过该方法细化,直到能产生()。 产品、功能需求和设计活动 商业、质量和功能需求 商业、产品和功能需求 商业

    2024年02月10日
    浏览(26)
  • 软件工程(十三) 设计模式之结构型设计模式(一)

    前面我们记录了创建型设计模式,知道了通过各种模式去创建和管理我们的对象。但是除了对象的创建,我们还有一些结构型的模式。 简要说明 将一个类的接口转换为用户希望得到的另一个接口。它使原本不相同的接口得以协同工作。 速记 转换接口 类图如下 角色说

    2024年02月11日
    浏览(36)
  • 软件设计实验三 结构型设计模式实验

    1.结合实例,熟练绘制常见的结构型设计模式结构图。 2.结合实例,熟练使用任意一种面向对象编程语言实现常见的结构型设计模式。 3.通过本实验,理解每一种结构型设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。 1.现有一个接口DataOperation定义

    2024年02月03日
    浏览(38)
  • 软件工程(十四) 设计模式之结构型模式(二)

    简要说明 将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 速记 树形目录结构 类图如下 由类图其实可以看出,组合模式就是将具有父子关系的结构,组装形成一棵树,并且根据规范,树干节点和叶子节点均

    2024年02月11日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包