STL(标准模板库)中使用的设计模式

问题描述 投票:0回答:7

我正在学习STL和设计模式。 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据

c++ design-patterns stl
7个回答
17
投票

我希望你的意思是,“哪些设计模式可以在STL中被识别”。

STL堆栈是一个容器适配器。适配器是一种设计模式。迭代器也是一种设计模式。 STL函数对象与命令模式相关。

图案:

  1. 适配器(容器适配器)
    • 堆栈
    • 排队
    • 优先队列
  2. 迭代器
  3. Command + Adapter(功能适配器)
  4. Iterator + Adapter(迭代器适配器)
    • 反向迭代器
    • 插入迭代器
    • 流迭代器
  5. 模板方法(使用用户指定函数的STL算法)
  6. 哪种创作模式? (分配器)

这些模式的实现方式与面向对象设计中的实现方式非常不同。 Josuttis 写道“STL 概念与面向对象编程的原始思想相矛盾”。这就是导致您的问题出现混乱的原因。


1
投票

迭代器模式在STL中被大量使用。


1
投票

STL 大量使用模板。 GoF 称之为参数化类型。模板对于自定义设计模式解决方案或提出新的直观解决方案非常有用。 (有关更多详细信息,请参阅“设计模式:可重用面向对象软件的元素”中的“继承与参数化类型”部分)。熟悉 STL(和 boost)的好处是,它们是学习 C++ 模板(和元编程)的良好来源,而 C++ 模板又可用于设计更好的设计。


1
投票

我认为你的问题是设计模式没有在STL中实现。 它们可以用 C++ 实现并使用 STL 的容器和算法,但 STL 和设计模式没有任何其他方式相关。

我的建议是通过阅读 Nicolai Josuttis 的优秀书籍 C++ 标准库:教程和参考STL 教程和参考指南 来了解 STL。 这将有助于了解 STL 可以为您做什么。 然后利用您对 STL 的了解,深入研究在 C++ 中实现设计模式。


0
投票

C++11开始,我们得到了三种智能指针,即shared_ptr、unique_ptr和weak_ptr,它们背后的模式是:代理模式


0
投票

std::vector<bool>::reference
std::bitset::reference
也是 代理模式

的示例

0
投票

我从现代 STL 的头脑中意识到的是:

  1. 迭代器广泛传播。它们存在于每个容器中
  2. 单例(例如 std::cout)
  3. 工厂方法(std::make_unique、std::make_shared 等)
  4. 访问者(std::visit 与 std::variant)
  5. 适配器(std::stack 适应您作为模板类型提供的集合)
  6. 命令(std::function)
  7. 责任链(范围?)
  8. 装饰器(std::reference_wrapper?)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.