1

假设在我的程序中,我有一个Robot继承自其他类的类。

到目前为止,我在Robotlike addPartor中有一些方法getCost。现在我被要求为其添加一个新的功能模块(一些使用它的部分的方法),但他们明确要求添加新模块,对当前类几乎没有影响。

我认为Visitor可以解决这个问题,但问题是我不会将模式应用于层次结构。这是正确的做法吗?(如您所见,我Robot是复合材料的一部分)

在此处输入图像描述

4

1 回答 1

1

基本上,我同意你的方法。您已经成功地确定了一种方法,该方法允许您扩展 Robot(零件组合),而无需实际修改 Robot 类。我要做的唯一更改如下:

我将引入一个名为IPartsComposite之类的新接口,该接口将定义Accept方法。该接口将由Robot实现,因为它由Part实例组成。

基访问者将是基通用类或接口,即访问者<T>。这种类型将定义一个方法Visit(T)。然后,在您的情况下,您将拥有Visitor<IPartsComposite>的三个具体实现。

  • 零件访客服务
  • PartsVisitorCosts
  • 零件访客生产

在每个具体类中,您将实现Visit(IPartsComposite)

于 2013-05-22T18:53:01.893 回答