当前位置: 首页 > article >正文

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

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.kler.cn/a/576122.html

相关文章:

  • 九、Redis 并发控制:单线程原理与 Pipeline 批量优化
  • 部署Nagios Core服務器安裝好了部署了aapenal 作為網頁服務器設定了防火墻可視化的軟件來每日監測服務器的狀況.
  • 计算机毕业设计SpringBoot+Vue.js周边游平台(源码+文档+PPT+讲解)
  • createrepo centos通过nginx搭建本地源
  • 实现NTLM relay攻击工具的Python代码示例
  • TensorFlow的pb模型
  • 如何在PHP爬虫中处理异常情况的详细指南
  • Python基于Django的图书馆管理系统【附源码、文档说明】
  • SpringMVC 的配置及拦截器
  • 推荐一个基于Koin, Ktor Paging等组件的KMM Compose Multiplatform项目
  • macOS常用网络管理配置命令
  • ReAct论文阅读笔记总结
  • android13打基础: timepicker控件
  • Manus邀请码获取方法 + 使用指南(直接领取pdf)
  • Vue项目实战
  • uniapp 常用 UI 组件库
  • MAC电脑常用操作
  • App Standby省电机制流程
  • 前端vue项目打包及部署的详细说明
  • Docker安全优化与隔离