- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在四人帮的引用书《可重用面向对象软件的设计模式元素》中,访问者模式的意图解释如下:
Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.
我读到的有关访问者模式的另一个优点是:
ADD A NEW OPERATION WITHOUT HAVING THE SOURCE CODE OF THE CLASSES..
我在 Google 中进行了深入搜索,但没有找到任何说明如何执行此操作的示例。让我们举一个简单的例子:
public interface MyInterface {
public void myMethod();
}
public class MyClassA implements MyInterface {
/* (non-Javadoc)
* @see com.mycomp.tutorials.designpattern.behavorials.MyInterface#myMethodA()
*/
public void myMethod() {
System.out.println("myMethodA implemented in MyClassA");
}
}
public class MyClassB implements MyInterface {
/* (non-Javadoc)
* @see com.mycomp.tutorials.designpattern.behavorials.MyInterface#myMethodA()
*/
public void myMethod() {
System.out.println("myMethod implemented in MyClassB");
}
}
那么,如何使用访问者模式将新方法 myNewMethod()
添加到这个类层次结构中而不更改它们?
最佳答案
您的示例不是访问者模式。这只是继承。
访问者模式首先需要访问者接口(interface)
interface ThingVisitor {
void visit(ThingA a);
void visit(ThingB b);
}
现在您需要一个接口(interface)事物
:
interface Thing {
void accept(ThingVisitor visitor);
}
例如,您的 ThingA
的实现将是
class ThingA implements Thing {
public void accept(final ThingVisitor visitor) {
visitor.visit(this);
}
}
现在您会看到处理 Thing
类型的逻辑包含在 ThingVisitor
的实现中。
关于java - 访客设计模式意图: misleading or I am missing something?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968494/
在四人帮的引用书《可重用面向对象软件的设计模式元素》中,访问者模式的意图解释如下: Represent an operation to be performed on the elements of
我使用 iTextPdf 对 PDF 进行签名和完整性检查,由 Alfresco 提供支持 这是签名代码: public void signItem(NodeRef itemToSign, Strin
今天,我已将 Karma Coverage 集成到我现有的 RequireJS 应用程序中。我添加了 karma-requirejs 插件,我能够成功获得覆盖率报告。 一开始报告很好,覆盖率几乎是10
警告是: /home/dronz/OF/apps/myApps/HexMap/src/HexMap.cpp:48:5: warning: this ‘if’ clause does not guard
从 iOS6 开始,我无法确定该应用程序是否可以启动 Safari。 如果设备上的 Safari 受到限制(设置>常规>限制),尝试打开 URL 时没有任何反应,也没有任何错误提示: NSURL *u
我使用 ggplot2 绘制我的数据并得到错误 “prediction from a rank-deficient fit may be misleading”。看这里: # Data. temp <
当我使用模型进行预测时遇到问题,R 显示此消息警告消息预测来自排名不足的拟合可能会产生误导,我该如何解决?我认为我的模型是正确的,但预测失败了,我不知道为什么。 在这里您可以逐步看到我正在做的事情以及
目前,我正面临这个问题。 当我在几个小时后上传到应用商店时,我的应用被拒绝了。 应用商店显示的错误。 我们的应用程序或其元数据似乎仍然包含误导性内容。 具体来说,您的应用包含未经必要授权的类似于 De
当我使用模型进行预测时遇到问题,R 显示此消息警告消息预测来自排名不足的拟合可能会产生误导,我该如何解决?我认为我的模型是正确的,但预测失败了,我不知道为什么。 在这里您可以逐步看到我正在做的事情以及
更新:此问题与 Google Colab 的“笔记本设置:硬件加速器:GPU”有关。此问题是在添加“TPU”选项之前编写的。 阅读了多个关于 Google Colaboratory 提供免费 Tesl
(我现在已经通过添加本文末尾指定的依赖项解决了这个问题,但想知道是否有更好的选择或者我是否遗漏了一些重要的东西?) 当尝试运行 mapreduce 作业时,行 JobClient.runJob(con
此 R 代码引发警告 # Fit regression model to each cluster y fit$rank 检查 另一种方法是拥有比可用变量更多的参数: fit2 <- lm(y ~
我是一名优秀的程序员,十分优秀!