这是flyweight模式结构图:
在这里你可以看到GoF解释的UnsharedConcreteFlyweight:
UnsharedConcreteFlyweight: 并非所有Flyweight子类都需要共享。 Flyweight 界面实现共享;它没有强制执行。这很常见 UnsharedConcreteFlyweight对象将ConcreteFlyweight对象作为 flyweight对象结构中某些级别的子节点(如Row 和列类有。)
尽管我理解Operation
将in extrinsicState
作为参数,但它根本不会使用它,只要它有allState
作为成员数据。
这是一个好的设计吗?要接受你不使用的参数,如果你将使用,那么你将有数据重复。这甚至可能是Liskov Substitution Principle违规?
答案 0 :(得分:0)
还是不错的! Liskov替换原则(LSP)完全是关于按合同设计。只要UnsharedConcreteFlyweight.Operation
满足Flyweight.Operation
的合同,就没有问题!
忽略输入参数(在这种情况下是外部状态)只是LSP违规的指示,并非总是如此。