让我们说在我的程序中,我有一个名为Robot
的类,它继承自其他类。
到目前为止,我在Robot
addPart
或getCost
内有一些方法。现在我被要求为它添加一个新的功能模块(一些使用它的部分的方法),但他们明确要求添加新模块,对当前类几乎没有影响。
我认为Visitor
可以解决这个问题,但问题是我不会将模式应用于层次结构。这是正确的事吗? (你可以看到我的Robot
是复合词的一部分)
答案 0 :(得分:1)
从根本上说,我同意你的做法。您已经成功确定了一种方法,允许您扩展Robot(组件复合),而无需实际修改Robot类。我将做的唯一改变如下:
我将介绍一个名为 IPartsComposite 的新界面,它将定义 Accept 方法。此界面将由 Robot 实现,因为它由 Part 实例组成。
基本访问者将是基本通用类或接口,即访客< T> 。此类型将定义单个方法访问(T)。然后,在您的情况下,您将有三个访客< IPartsComposite> 的具体实现。
在每个具体课程中,您将实施访问(IPartsComposite)。