我想实现一个在树的多个节点之间共享的组件系统。 我想象Flyweight模式非常适合这种用途。 该组件仅实例化一次,并且该实例被提供给需要它的每个节点。 这样,如果组件的属性发生更改,则会立即将其共享给节点。
现在,我想在节点上只更改组件的一个参数而不影响其他节点。 但我不想复制组件的实例来做到这一点。
我想要创建的是一种类似于Unity中场景树的机制,我们可以在节点级覆盖组件的某些属性(例如,当我们使用预制件时),而不会影响原始资源,除非我们明确要求。
现在,我不知道如何制作具有某种可覆盖属性的轻量级模式。
你能帮助我吗?
谢谢
答案 0 :(得分:2)
由于Flyweight(您清楚地了解)使用共享对象,因此您无法修改这些对象而不会影响指向该flyweight的所有内容。解决这个问题的方法是使用合成。也就是说,当你想创建一个'覆盖'您创建一个包装flyweight的新对象并应用新行为。我的GoF模式有点生疏,但我认为这实际上是应用于Flyweights的Decorator模式。