gpt4 book ai didi

design-patterns - 通过构造函数注入(inject)装饰与简单继承

转载 作者:行者123 更新时间:2023-12-04 15:25:00 26 4
gpt4 key购买 nike

有人可以告诉我使用构造函数注入(inject)另一个类而不是类继承来创建装饰器类之间的区别(如好处)吗?在我能想到的例子中,我可能会以两种方式之一来实现相同的最终目标,但我怀疑我错过了一些基本的东西。

最佳答案

装饰器模式涉及组合对象。为了能够继承该对象的类型,它显然必须是可继承的。并非所有类型都是为继承而设计的,即意味着是基类,即使从纯粹的技术角度来看它们可以被继承(我认为这是一个设计缺陷)。

装饰器模式存在的理由是能够在不修改对象本身的情况下修改对象的行为。通过继承,您实际上是在修改对象本身,然后您得到的是通过多态性进行的常规行为变化,这意味着您没有完成相同的事情。

因此,装饰和继承都有其用途。当其中任何一个为真时使用装饰

  • 你不能继承(例如,如果类是 C# 中的 sealed)
  • 你不应该继承(该类显然不是基类)
  • 你想多次改变一个特定对象的行为(通过用不同行为的装饰器包装它)

  • 请注意,继承是 OO 工具箱中最强大的工具。强大的力量伴随着巨大的责任,而这并不总是容易应付的。我会说:总是组合或聚合。如果无法做到这一点,请继承。如果你不能继承,那就更努力地组合或聚合。”

    关于design-patterns - 通过构造函数注入(inject)装饰与简单继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12132905/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com