四人帮 - 设计模式 - 这些模式示例是否以过时的方式编码?

2024-04-05

所以为了澄清我的问题......臭名昭著的 GoF 书中的每个模式 -设计模式 可重用的面向对象软件的元素- 有 C++ 代码示例。

这些是最新的吗?或者现在的 C++ 代码看起来有很大不同吗?

我这么问是因为当我发布带有最后一个问题的代码时,许多 C++ 开发人员告诉我应该摆脱指针,那里广泛使用的指针......


是的,它们有点过时了。但这些书的部分观点是,这些模式在多种不同的语言和多种不同的风格中都很有用。因此,虽然代码有点陈旧,但其背后的想法却并非如此,而这些想法正是这些书中的重要内容。

我希望看到一些利用元编程技术的模式实现。我强烈怀疑某些模式,例如 Bridge、Adapter 以及可能的 Facade,使用元编程实现起来不会那么繁琐。从另一个答案,并阅读描述,它看起来像现代 C++ 设计:通用编程和设计模式的应用 https://rads.stackoverflow.com/amzn/click/com/0201704315对于此类事情可能是一本好书。但我个人不能保证这一点。

除了可能使用泛型编程和模板技术之外,主要区别在于裸指针在当今的 C++ 中很少见。通常应该使用有效的智能指针类型,因为它们可以为您处理许多资源管理问题。坦率地说,除非您非常清楚自己在做什么,否则我不建议尝试基于通用编程的设计。

以下是在不同上下文中使用哪种类型的智能指针的一些示例。这些示例假设您有一个包含 TR1(技术报告 1)扩展的 C++:

当您有一个指针,该指针完全由指向它的对象拥有时,请使用::std::auto_ptr (or ::std::unique_ptr在 C++1x 中)。请记住::std::auto_ptr不能存储在STL容器中,但是::std::unique_ptr没有这个问题。示例可能是组件模式(只要没有共享两个子组件)、外观模式和适配器模式。此外,工厂模式可能应该生产::std::auto_ptrs (or ::std::unique_ptrC++1x 中的 s)除非有充分的理由进行生产::std::shared_ptrs.

当你有一个指向共享所有权的指针时,使用::std::tr1::shared_ptr。例如,享元模式。此外,在某些情况下,组件模式也可能具有此属性。它在桥接模式中也可能有用。

当你有一个指向你在逻辑上不拥有的东西的指针时,那么::std::tr1::weak_ptr是要走的路。请记住,如果您使用::std::tr1::weak_ptr你还应该使用::std::tr1::shared_ptr对于逻辑上拥有(或共享所有权)所指向项目的所有对象。观察者模式就是一个例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四人帮 - 设计模式 - 这些模式示例是否以过时的方式编码? 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有

随机推荐