C++ 设计模式理论与实战大全【共73课时】

获课地址:666it.top/14228/

观察者模式与原型模式:状态管理与对象复制

一、观察者模式:状态变化的广播机制

观察者模式通过主题接口与观察者接口,实现状态变化的自动通知。例如天气预报系统:

arduino 复制代码
cpp
class Observer {
public:
    virtual void Update(float temp) = 0;
};
class Subject {
private:
    std::vector<Observer*> observers;
    float temperature;
public:
    void Attach(Observer* obs) { observers.push_back(obs); }
    void SetTemperature(float temp) {
        temperature = temp;
        Notify();
    }
    void Notify() {
        for (auto obs : observers) {
            obs->Update(temperature);
        }
    }
};
class Display : public Observer {
public:
    void Update(float temp) override {
        std::cout << "Temperature updated: " << temp << "°C" << std::endl;
    }
};

应用场景:事件处理系统、股票行情推送。

二、原型模式:对象的快速复制

原型模式通过克隆现有对象创建新实例,适用于需要频繁创建相似对象的场景。例如简历复制:

arduino 复制代码
cpp
class Resume {
public:
    virtual Resume* Clone() = 0;
};class ConcreteResume : public Resume {
private:
    std::string content;
public:
    ConcreteResume(const std::string& c) : content(c) {}
    Resume* Clone() override {
        return new ConcreteResume(content); // 浅拷贝
    }
};

深拷贝实现

typescript 复制代码
cpp
class DeepCopyResume : public Resume {
private:
    std::string* content;
public:
    DeepCopyResume(const std::string& c) : content(new std::string(c)) {}
    ~DeepCopyResume() { delete content; }
    Resume* Clone() override {
        DeepCopyResume* newResume = new DeepCopyResume("");
        newResume->content = new std::string(*content); // 深拷贝
        return newResume;
    }
};

优点:避免重复初始化,提高对象创建效率。

相关推荐
哈哈老师啊7 小时前
Springboot简单二手车网站qs5ed(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
JIngJaneIL7 小时前
基于Java+ vue图书管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
IT_陈寒8 小时前
Vue 3.4 实战:5个被低估的Composition API技巧让我的开发效率提升40%
前端·人工智能·后端
VX:Fegn08958 小时前
计算机毕业设计|基于springboot + vue考勤管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
一 乐8 小时前
幼儿园管理|基于springboot + vue幼儿园管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
JIngJaneIL8 小时前
基于Java + vue校园论坛系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
wangjialelele8 小时前
git工作原理、个人使用到多人协作开发与git FLOW模型
c语言·c++·git·团队开发·个人开发
期待のcode8 小时前
Springboot多数据源配置
java·数据库·spring boot·后端·mybatis
iCxhust8 小时前
__acrtused 是什么
c语言·c++·单片机·嵌入式硬件·微机原理