假设在我的程序中,我有一个Robot
继承自其他类的类。
到目前为止,我在Robot
like addPart
or中有一些方法getCost
。现在我被要求为其添加一个新的功能模块(一些使用它的部分的方法),但他们明确要求添加新模块,对当前类几乎没有影响。
我认为Visitor
可以解决这个问题,但问题是我不会将模式应用于层次结构。这是正确的做法吗?(如您所见,我Robot
是复合材料的一部分)
假设在我的程序中,我有一个Robot
继承自其他类的类。
到目前为止,我在Robot
like addPart
or中有一些方法getCost
。现在我被要求为其添加一个新的功能模块(一些使用它的部分的方法),但他们明确要求添加新模块,对当前类几乎没有影响。
我认为Visitor
可以解决这个问题,但问题是我不会将模式应用于层次结构。这是正确的做法吗?(如您所见,我Robot
是复合材料的一部分)
基本上,我同意你的方法。您已经成功地确定了一种方法,该方法允许您扩展 Robot(零件组合),而无需实际修改 Robot 类。我要做的唯一更改如下:
我将引入一个名为IPartsComposite之类的新接口,该接口将定义Accept方法。该接口将由Robot实现,因为它由Part实例组成。
基访问者将是基通用类或接口,即访问者<T>。这种类型将定义一个方法Visit(T)。然后,在您的情况下,您将拥有Visitor<IPartsComposite>的三个具体实现。
在每个具体类中,您将实现Visit(IPartsComposite)。