0

0

C++ 设计模式与 C++ 标准库的整合

PHPz

PHPz

发布时间:2024-06-26 14:15:02

|

807人浏览过

|

来源于php中文网

原创

c++++ 设计模式可以与 c++ 标准库整合,提高代码简洁性、效率和可维护性。案例:观察者模式与智能指针,使用 vector 存储观察者,使用 shared_ptr 防止悬垂指针。其他整合案例:工厂模式、单例模式、迭代器模式、适配器模式。

C++ 设计模式与 C++ 标准库的整合

C++ 设计模式与 C++ 标准库的整合

C++ 标准库提供了丰富的容器、算法和函数,它们是实现设计模式的理想工具。通过整合 C++ 设计模式和标准库,我们可以创建简洁、高效且可维护的代码。

实战案例:观察者模式与智能指针

考虑一个观察者模式的例子,其中 Subject 维护一个观察者的集合。当 Subject 的状态发生变化时,它将通知所有观察者。

立即学习C++免费学习笔记(深入)”;

我们可以使用 C++ 标准库中的 vector 来存储观察者:

HTShop网上购物系统
HTShop网上购物系统

HTShop网上购物系统由恒天网络科技有限公司根据国际先进技术和国内商务特点自主版权开发的一款具有强大功能的B2C电子商务网上购物平台。HTShop以国际上通用流行的B/S(浏览器/服务器)模式进行设计,采用微软公司的ASP.NET(C#)技术构建而成。 2007-11-10 HTShop CS 通用标准版 v1.1.11.10 更新内容自由更换模版功能开放 修改了购买多款商品,会员中心订单只显示

下载
class Subject {
public:
    void addObserver(Observer* observer) { observers.push_back(observer); }
    void notifyObservers() {
        for (auto& observer : observers) {
            observer->update();
        }
    }
private:
    std::vector observers;
};

为确保观察者不会被意外销毁,我们可以使用智能指针。这里我们使用 shared_ptr

class Observer {
public:
    virtual ~Observer() {}  // 析构函数需要成为虚函数
    virtual void update() = 0;  // 纯虚函数,强制实现
};

class ConcreteObserver1 : public Observer {
public:
    void update() override { std::cout << "ConcreteObserver1 notified\n"; }
};

class ConcreteObserver2 : public Observer {
public:
    void update() override { std::cout << "ConcreteObserver2 notified\n"; }
};

int main() {
    Subject subject;

    auto observer1 = std::make_shared();
    auto observer2 = std::make_shared();

    subject.addObserver(observer1.get());  // 使用 .get() 获取原始指针
    subject.addObserver(observer2.get());

    subject.notifyObservers();

    return 0;
}

在这个例子中,std::vector 确保了观察者的集合与 Subject 具有相同生命周期。shared_ptr 则防止了观察者在不需要时被销毁,从而避免了悬垂指针的问题。

其他整合案例

以下是一些其他使用 C++ 标准库实现设计模式的案例:

  • 工厂模式:使用一个 map 来存储不同的产品类型。
  • 单例模式:使用一个 singleton 确保只有单个实例存在。
  • 迭代器模式:使用标准库中的迭代器来遍历集合。
  • 适配器模式:使用一个 Adapter 类来使不兼容的类能够一起工作。

通过整合 C++ 设计模式和标准库,我们可以创建灵活、可重用且高效的代码。

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

25

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

36

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

31

2025.11.27

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

389

2023.08.14

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.7万人学习

C 教程
C 教程

共75课时 | 3.8万人学习

C++教程
C++教程

共115课时 | 10.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号