Uml 将访问者模式作为单个类的扩展机制应用
假设在我的程序中有一个名为Uml 将访问者模式作为单个类的扩展机制应用,uml,design-patterns,visitor,Uml,Design Patterns,Visitor,假设在我的程序中有一个名为Robot的类,它继承自其他类 到目前为止,我在Robot中有一些方法,比如addPart或getCost。现在我被要求向它添加一个新的功能模块(一些使用它的部分的方法),但是他们明确要求添加新模块,而对当前类几乎没有影响 我认为一个访问者可以解决这个问题,但问题是我不会将模式应用到层次结构中。这是正确的做法吗?(正如您所看到的,我的机器人是组合的一部分) 基本上,我同意你的方法。您已经成功地确定了一种方法,该方法允许您扩展Robot(零件组合),而无需实际修改Robo
Robot
的类,它继承自其他类
到目前为止,我在Robot
中有一些方法,比如addPart
或getCost
。现在我被要求向它添加一个新的功能模块(一些使用它的部分的方法),但是他们明确要求添加新模块,而对当前类几乎没有影响
我认为一个访问者可以解决这个问题,但问题是我不会将模式应用到层次结构中。这是正确的做法吗?(正如您所看到的,我的机器人是组合的一部分)
基本上,我同意你的方法。您已经成功地确定了一种方法,该方法允许您扩展Robot(零件组合),而无需实际修改Robot类。我唯一要做的改动如下:
我将引入一个名为IPartsComposite的新接口,它将定义Accept方法。该接口将由机器人实现,因为它由部分实例组成
基本访问者将是一个基本泛型类或接口,即访问者。此类型将定义单个方法访问(T)。然后,在您的例子中,您将有三个访问者的具体实现
- PartsVisitorService
- PartsVisitor成本
- 零件视觉制作
在这些具体的类中,您将实现访问(IPartsComposite)基本上,我同意您的方法。您已经成功地确定了一种方法,该方法允许您扩展Robot(零件组合),而无需实际修改Robot类。我唯一要做的改动如下:
我将引入一个名为IPartsComposite的新接口,它将定义Accept方法。该接口将由机器人实现,因为它由部分实例组成
基本访问者将是一个基本泛型类或接口,即访问者。此类型将定义单个方法访问(T)。然后,在您的例子中,您将有三个访问者的具体实现
- PartsVisitorService
- PartsVisitor成本
- 零件视觉制作
在每一个具体的类中,您都将实现Visit(IPartsComposite)实际上,我认为我现在对这种方法有一个问题。每个Visit函数都应该返回不同的结果,所以我不知道这个模式现在是否适用于此。@user2313248您可以更改Visit的签名以返回一个通用的结果对象。结果可能会包含每种不同的回报类型。实际上,我认为我现在对这种方法有一个问题。每个Visit函数都应该返回不同的结果,所以我不知道这个模式现在是否适用于此。@user2313248您可以更改Visit的签名以返回一个通用的结果对象。结果可以包装每个不同的返回类型。