设计模式之状态模式(State)的C++实现

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

1、状态模式的提出

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

2、需求描述

一年有不同节日,不同的节日穿不同的衣服,吃不同的食物。节日可能会随着人们的生活习俗不断地增加。设计一个根据不同地节日,返回对应穿着和食物方面的功能代码。

3、状态模式的代码实现

(1)UML图如下:

设计模式之状态模式(State)的C++实现,设计模式,设计模式,c++

(2)代码实现如下:

#include <iostream>
class AbsFestival
{
public:
    virtual ~AbsFestival(){};
    virtual void Eat()=0;
    virtual void Wear()=0;
};

class FestivalA:public AbsFestival
{
public:
    static FestivalA* getInstance()
    {
        static FestivalA obj;
        return &obj;
    };
    virtual void Eat()override
    {
        std::cout << "FestivalA Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalA Wear" << std::endl;
    };
};

class FestivalB:public AbsFestival
{
public:
    static FestivalB* getInstance()
    {
        static FestivalB obj;
        return &obj;
    };
    virtual void Eat()override
    {
        std::cout << "FestivalB Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalB Wear" << std::endl;
    };
};

class FestivalC:public AbsFestival
{
public:
    static FestivalC* getInstance()
    {
        static FestivalC obj;
        return &obj;
    };
    virtual void Eat()override
    {
        std::cout << "FestivalC Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalC Wear" << std::endl;
    };
};

class FestivalD:public AbsFestival
{
public:
    virtual void Eat()override
    {
        std::cout << "FestivalD Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalD Wear" << std::endl;
    };
};

class Client
{
protected:
    AbsFestival *time;
public:
    void SetTime(AbsFestival* p)
    {
        time = p;
    }
    void DoWork()
    {
        time->Eat();
        time->Wear();
    }
};

int main()
{
    Client useObj;

    FestivalA festivalA;
    useObj.SetTime(festivalA.getInstance());
    useObj.DoWork();

    FestivalB festivalB;
    useObj.SetTime(festivalB.getInstance());
    useObj.DoWork();

    FestivalC festivalC;
    useObj.SetTime(festivalC.getInstance());
    useObj.DoWork();

    FestivalD* festivalD = new FestivalD();
    useObj.SetTime(festivalD);
    useObj.DoWork();

    delete festivalD;
    festivalD = nullptr;
    return 0;
}

 程序运行结果如下:

设计模式之状态模式(State)的C++实现,设计模式,设计模式,c++文章来源地址https://www.toymoban.com/news/detail-660066.html

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

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

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

相关文章

  • 3.8设计模式——State 状态模式(行为型)

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

    2024年04月26日
    浏览(26)
  • 大话设计模式——17.状态模式(State Pattern)

    简介 对象的行为依赖于它的状态(属性),可以根据状态的改变而改变相关行为。 UML图: 应用场景: 对象的行为取决于其状态,并且必须要在运行时刻根据状态而改变行为 代码中包含大量与对象状态有关的条件语句 示例 上午、下午、晚上工作的状态 上下文对象: 状态

    2024年04月14日
    浏览(29)
  • 设计模式二十一:状态模式(State Pattern)

    一个对象的内部状态发生变化时,允许对象改变其行为。这种模式使得一个对象看起来好像在运行时改变了它的类,主要目的是将状态的行为从主要对象中分离出来,使得主要对象不必包含所有状态的逻辑,而是将每个状态的行为封装在独立的类中。这有助于减少代码的重复

    2024年02月11日
    浏览(36)
  • 状态设计模式(State Pattern)[论点:概念、相关角色、图示、示例代码、框架中的运用、适用场景]

            状态模式 (State Pattern)是一种行为型设计模式,用于解决对象在不同状态下的行为问题。它允许一个对象在其内部状态改变时改变它的行为。状态模式主要包含三个部分: 上下文 (Context)、 状态接口 (State)和 具体状态实现类 (ConcreteState)。 状态接口(St

    2023年04月14日
    浏览(35)
  • C++设计模式20:状态模式

    C++ 23种设计模式系列文章目录 创建型模式 第1式 工厂方法模式 第2式 抽象工厂模式 第3式 单例模式 第4式 建造者模式 第5式 原型模式 结构型模式 第6式 适配器模式 第7式 桥接模式 第8式 组合模式

    2024年02月02日
    浏览(25)
  • C++设计模式之状态模式

    【声明】本题目来源于卡码网(卡码网KamaCoder) 【提示:如果不想看文字介绍,可以直接跳转到 C++编码部分 】         --什么是状态模式(第20种设计模式)          状态模式 (State Pattern)是⼀种 行为型设计模式 ,它适⽤于⼀个对象在不同的状态下有不同的行为时,

    2024年01月25日
    浏览(32)
  • Unity实现设计模式——状态模式

    状态模式最核心的设计思路就是将对象的状态抽象出一个接口,然后根据它的不同状态封装其行为,这样就可以实现状态和行为的绑定,最终实现对象和状态的有效解耦。 在实际开发中一般用到FSM有限状态机的实现,GF框架中的FSM和流程控制就是基于这个原理实现的。 状态

    2024年02月08日
    浏览(26)
  • 【设计模式】用Java实现状态模式

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

    2024年02月10日
    浏览(26)
  • 设计模式学习笔记 - 设计模式与范式 -行为型:8.状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

    本章学习状态模式。在实际的开发中,状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。从这一点上看,它有点像我们之前讲到的组合模式。 状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。不过,状态机的实现方式

    2024年04月10日
    浏览(35)
  • 设计模式:命令模式(C++实现)

    命令模式(Command Pattern)是一种行为设计模式,它将请求封装成一个对象,从而使您可以使用不同的请求对客户端进行参数化。这使得客户端可以独立于具体的请求和接收者对请求进行操作。 以下是一个简单的C++命令模式的示例: 在上述示例中,Command是命令的基类,定义了

    2024年02月07日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包