当我不得不扩展一个类的行为而不修改它时,我经常使用设计模式 visitor 。它在不修改它所使用的类的核心的情况下添加了类似成员的函数。

或多或少以同样的方式,我需要扩展第三方类,但主要是数据,而不是行为。

在这种情况下,我经常使用 std::map 将 a 键 MyClass* 与值 MyClassExtender 匹配。 MyClassExtender 包含所有附加信息。

这样做时,我碰巧想知道是否还有其他方法可以做到这一点,也许更常见或更“最佳实践”。我应该将这个附加类称为 Extender 吗?
有这种图案的名字吗...

Nota Bene:我可以简单地将 MyClass* 和 MyClassExtender 聚合到一个新类中,但是我需要经常访问 MyClassExtender 给定 MyClass*,因此 st::map 非常方便。

最佳答案

你为什么不只是对这个类进行子类化?继承是扩展类的方式,无论是行为还是状态。除非您只想将类的实例与其他数据相关联,在这种情况下它根本不会扩展,并且 std::map 是正确的答案。

关于c++ - 设计模式,将数据添加到类(第 3 方)而不修改它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13009542/

10-10 12:35