- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找访客模式的常见用例。我可以在互联网上找到一些示例,但它们相当基础,只能解释概念,而不是当这种模式真正可以节省您的时间/生命时。
您有使用这种模式的真实示例吗? (例如,在 Github 中的现有 java 项目中)
我不清楚它大规模解决了什么问题以及为什么开发人员可能会使用它?
最佳答案
当您想要向对象发送消息(即调用方法),但由于编译器的类型检查而无法发送消息时,访问者模式非常有用。例如,该对象被声明为属于类型(接口(interface))Animal
,该类型只有方法say()
,并且您想要调用方法smile()
在该对象上。
是的,您可以修改接口(interface)Animal
(添加方法smile()
),但由于某种原因,您希望保持接口(interface)稳定。如果将来您需要更多方法,例如 go()
、walk()
...?
是的,您可以将 Animal
对象转换为您想要的每种特定类型,例如Dog
、Cat
...但出于某种原因,您希望保持此调用代码稳定,而不关心特定的动物类型。如果将来你有更多的动物类型,如鸟
、大象
...?毕竟,调用代码只是想让对象微笑,并不想在对象出现新的特定类型时进行修改。
所以,让我们将所有这些不稳定的事情委托(delegate)给访问者。您将拥有 SmileVisitor
、GoVisitor
、WalkVisitor
...以及 visit(Dog)
、 方法访问(Cat)
...并像这样使用它们:
new SmileVisitor().visit(animal);
P/S:我认为您可以找到一些自行保持源代码某些部分稳定的常见用例。
关于design-patterns - 访问者模式的常见用例有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560060/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!