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内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

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

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

36

2025.11.16

golang map原理
golang map原理

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

60

2025.11.17

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

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

40

2025.11.27

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

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

404

2023.08.14

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

8

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

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

51

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

27

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

354

2026.01.21

热门下载

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

精品课程

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

共94课时 | 7.3万人学习

C 教程
C 教程

共75课时 | 4.2万人学习

C++教程
C++教程

共115课时 | 13.3万人学习

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

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