将访客模式应用为单个类的可扩展性机制

时间:2013-05-22 18:01:45

标签: uml design-patterns visitor

让我们说在我的程序中,我有一个名为Robot的类,它继承自其他类。

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

我认为Visitor可以解决这个问题,但问题是我不会将模式应用于层次结构。这是正确的事吗? (你可以看到我的Robot是复合词的一部分)

enter image description here

1 个答案:

答案 0 :(得分:1)

从根本上说,我同意你的做法。您已经成功确定了一种方法,允许您扩展Robot(组件复合),而无需实际修改Robot类。我将做的唯一改变如下:

我将介绍一个名为 IPartsComposite 的新界面,它将定义 Accept 方法。此界面将由 Robot 实现,因为它由 Part 实例组成。

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

  • PartsVisitorService
  • PartsVisitorCosts
  • PartsVisitorProduction

在每个具体课程中,您将实施访问(IPartsComposite)