【发布时间】:2012-04-01 23:38:02
【问题描述】:
我在研究访问者模式时遇到了这个有用的例子:https://stackoverflow.com/a/2604798/974594。这篇文章很清楚,很容易理解,虽然我在理解最后一部分时遇到了问题,从这里开始:
话虽如此,访问者通常是矫枉过正的,而且他们有 倾向于使 API 变得非常复杂,并且可能非常麻烦 为每一种新的行为定义一个新的访问者。
通常,应该使用更简单的模式(如继承)来代替 访客。例如,原则上我可以编写如下类:
class FruitPricer : IFruitVisitor { public double Price { get; private set; } public void Visit(Orange fruit) { Price = 0.69; } public void Visit(Apple fruit) { Price = 0.89; } public void Visit(Banana fruit) { Price = 1.11; } }它可以工作,但与这种微不足道的修改相比有什么优势:
抽象类水果
{ public abstract void Accept(IFruitVisitor visitor); public abstract double Price { get; } }
我没听懂他在说什么。我的意思是,如果他现在想要实现“价格”功能,必须对现有代码进行哪些更改/添加(基于这种模式方法)?=
【问题讨论】:
-
这个例子不是用Java写的(也许是C#?)
-
是的,我以 java 为例进行了正确的修改。它被标记为 java idk 为什么
-
@recoInrelax 不知道你做了什么修改使它成为Java-y,它仍然不是。
-
是的,我不是指代码。我只是从另一个帖子中复制的。伪造语法,基本上他的意思是,虽然第一块代码是实现价格功能的“模式”方式,但与第二块代码相比,它太小题大做了,更容易做到?跨度>
-
无论你怎么做,这个例子都没有意义... slice 它。
标签: c# design-patterns visitor-pattern