【问题标题】:Flyweight Pattern : UnsharedConcreteFlyweightFlyweight模式:UnsharedConcreteFlyweight
【发布时间】:2016-10-12 16:27:43
【问题描述】:

下面是享元模式结构图:

在这里您可以看到 GoF 解释的 UnsharedConcreteFlyweight:

UnsharedConcreteFlyweight : 并非所有享元子类都需要共享。蝇量级 界面启用共享;它不强制执行它。这很常见 UnsharedConcreteFlyweight 对象将 ConcreteFlyweight 对象作为 享元对象结构中某个级别的子级(如 Row 和 Column 类有)。

据我所知,Operationin extrinsicState 作为参数,但它根本不会使用它,因为它有 allState 作为成员数据。

这是一个好的设计吗?采用您不使用的参数,如果您将使用,那么您将有数据重复。这甚至可能违反了里氏替换原则?

【问题讨论】:

  • 我怀疑,你很少能找到一个在所有用例中都符合所有 SOLID 原则的模式。不是吗? “方便”在这里起着关键作用。如果我们硬着头皮去遵循一个原则,付出巨大的努力,却只获得几乎一无所获,而不是仅仅遵循它的快乐,那绝对是没有意义的。 :))

标签: design-patterns liskov-substitution-principle flyweight-pattern


【解决方案1】:

还是不错的! Liskov 替换原则 (LSP) 完全是关于按合同设计。只要UnsharedConcreteFlyweight.Operation满足Flyweight.Operation的约定,没问题!

忽略输入参数(在这种情况下为外部状态)只是 LSP 违规的指示,并非总是如此。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多