C/C++基础知识复习(50)

server/2025/3/10 17:59:34/

1. ​如何处理对象的状态变化?

状态模式是一种行为设计模式,允许对象在其内部状态改变时改变其行为。

通俗解释:

对象的状态就是它的“心情”或“模式”,比如灯的开关状态。

例子:

一个电灯有“开”和“关”两种状态,我们需要根据状态改变它的行为。

详细方法:

使用状态模式,将状态抽象成一个类。

代码示例:
class LightState {
public:virtual void handle() = 0;
};class OnState : public LightState {
public:void handle() override { std::cout << "Light is ON\n"; }
};class OffState : public LightState {
public:void handle() override { std::cout << "Light is OFF\n"; }
};class Light {
private:LightState* state;
public:Light() : state(new OffState()) {}void setState(LightState* s) { state = s; }void pressSwitch() { state->handle(); }
};int main() {Light light;light.pressSwitch(); // 灯关light.setState(new OnState());light.pressSwitch(); // 灯开return 0;
}

2. ​如何实现工厂模式?

工厂模式是一种创建型设计模式,定义一个用于创建对象的接口,但让子类决定实例化哪个类。

通俗解释:

工厂模式就是通过一个“工厂”来创建对象,就像你去工厂定制一辆车。

例子:

你需要创建不同类型的车(轿车、卡车),但不想直接调用构造函数。

详细方法:

定义一个工厂类,根据输入参数创建不同的对象。

代码示例:
class Car {
public:virtual void drive() = 0;
};class Sedan : public Car {
public:void drive() override { std::cout << "Driving Sedan\n"; }
};class Truck : public Car {
public:void drive() override { std::cout << "Driving Truck\n"; }
};class CarFactory {
public:static Car* createCar(const std::string& type) {if (type == "Sedan") return new Sedan();if (type == "Truck") return new Truck();return nullptr;}
};int main() {Car* car = CarFactory::createCar("Sedan");car->drive(); // 开轿车delete car;return 0;
}

http://www.ppmy.cn/server/173990.html

相关文章

python文本处理pdfminer库安装与使用

为了安装并使用pdfminer库来处理PDF文件&#xff0c;你需要先确保已经安装了这个库。pdfminer是一个可以从PDF文档中提取信息的工具包。在Python 3.9.7环境下&#xff0c;你可以通过pip来安装它。 安装 打开命令行工具&#xff08;终端或命令提示符&#xff09;&#xff0c;然…

DeepStream推理dewarped所有surfaces

原视频\opt\nvidia\deepstream\deepstream\samples\streams\sample_cam6.mp4如上图所示&#xff0c;是一个360度的球型视频&#xff0c;DeepStream的nvdewarper插件可以将原视频拆分成多个单独的视频&#xff0c;nvdewarper可以生成最大4个dewarped surfaces. \opt\nvidia\dee…

Android中的Loader机制

Android中的Loader机制是在Android 3.0版本之后引入的一种异步加载数据的方法。以下是对Android中Loader机制的详细解释&#xff1a; 一、Loader机制的基本概念 Loader是Android提供的一种异步加载数据的机制&#xff0c;它可以在后台线程中执行耗时操作&#xff0c;并在加载…

高效编程指南:PyCharm与DeepSeek的完美结合

DeepSeek接入Pycharm 前几天DeepSeek的充值窗口又悄悄的开放了&#xff0c;这也就意味着我们又可以丝滑的使用DeepSeek的API进行各种辅助性工作了。本文我们来聊聊如何在代码编辑器中使用DeepSeek自动生成代码。 注&#xff1a;本文适用于所有的JetBrains开发工具&#xff0c…

软件测试基础:功能测试知识总结

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、测试项目启动与研读需求文档 &#xff08;一&#xff09; 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中…

【Go学习实战】03-2-博客查询及登录

【Go学习实战】03-2-博客查询及登录 读取数据库数据初始化数据库首页真实数据分类查询分类查询测试 文章查询文章查询测试 分类文章列表测试 登录功能登录页面登录接口获取json参数登录失败测试 md5加密jwt工具 登录成功测试 文章详情测试 读取数据库数据 因为我们之前的数据都…

React基础之React.memo

允许组件在props没有改变的情况下跳过渲染 React渲染的机制是&#xff1a;只要父组件重新渲染&#xff0c;子组件就会跟着重新渲染&#xff0c;如果子组件不需要进行重新更新&#xff0c;此时就会存在资源浪费 const xxxmemo( ) import { memo, useMemo, useReducer, useState …

PDFMathTranslate安装使用

PDF全文翻译&#xff01;&#xff01;&#xff01;&#xff01; PDFMathTranslate安装使用 它是个啥 PDFMathTranslate 可能是一个用于 PDF 文件的数学公式翻译 工具。它可能包含以下功能&#xff1a; 提取 PDF 内的数学公式 将数学公式转换成 LaTeX 代码 翻译数学公式的内…