Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ HeadFirst book中的装饰器模式示例与在容器中存储对象_C++_Oop - Fatal编程技术网

C++ HeadFirst book中的装饰器模式示例与在容器中存储对象

C++ HeadFirst book中的装饰器模式示例与在容器中存储对象,c++,oop,C++,Oop,我正在阅读Head First Design Patterns中的Decorator模式,并在互联网上浏览了一些与之相关的示例 我不理解它的相关性 假设在书中的咖啡类示例中,我们有咖啡调味品装饰(或包装)咖啡类并调用getCost()函数,这反过来又会从咖啡类调用getCost()函数 但是,我更愿意让我的coffee类将调味品对象存储在一个向量中,并通过调用该向量中所有调味品的getCost()方法来计算总成本 我遗漏了什么,这个设计有漏洞吗 谢谢。我发现这里的描述有助于掌握模式的基本知识。我

我正在阅读Head First Design Patterns中的Decorator模式,并在互联网上浏览了一些与之相关的示例

我不理解它的相关性

假设在书中的咖啡类示例中,我们有咖啡调味品装饰(或包装)咖啡类并调用getCost()函数,这反过来又会从咖啡类调用getCost()函数

但是,我更愿意让我的coffee类将调味品对象存储在一个向量中,并通过调用该向量中所有调味品的getCost()方法来计算总成本

我遗漏了什么,这个设计有漏洞吗


谢谢。

我发现这里的描述有助于掌握模式的基本知识。我建议大家通读一遍,但以下是我收集到的一些东西,可能会给你一个基本的答案:

  • 在某些情况下,您需要类树中的某个对象上的功能,而不需要每个对象上的功能,如果将该功能添加到一个基类中,只会导致代码膨胀,而将其添加到多个(但不是所有)对象中需要该功能的子类将导致代码重复,这是配置管理的一个难题
  • 有些情况下,您无法控制正在使用的类的结构,也无法像您在问题中所建议的那样直接扩展它们
  • 在您希望能够向对象添加多个可选行为的情况下,执行子类继承变得越来越困难,因为您必须为所有选项组合创建子类

  • 欢迎来到堆栈溢出。请花点时间阅读并参考你可以在这里询问什么和如何提问的材料。所有这些动物、咖啡和形状通常都没有什么意义。我很乐意阅读软件开发书籍,以运动相关软件的例子。