假设我有一个 Item 类,它是复合模式的基类。
我有两个包含不同数据的特定子类 Movie 和 Music:
- 电影:导演、制片人、演员名单……
- 音乐:合唱团,唱片销量...
如果我想在客户端代码中访问电影数据(例如),我需要向下转换对应的 Item,因为 getProducer() 不是 Item 类的方法。
我被困在三种不同的方法之间:
- 将所有子类方法放到Item接口中
- 客户端代码中的向下转换项
- 使用从不同项目中提取数据的对象(使用一种访问者模式)
第三个命题似乎很有趣,因为它向客户端隐藏了 Item 子类,但我不知道如何让客户端更新 Item(例如更改电影的制片人)。
应用程序支持的 Item 子类类型将随着版本的发布而增长,我想对其进行设计以促进这些类型的添加。
也许我完全走错了路,有一个不同的更好的解决方案。