【发布时间】:2016-10-20 12:58:36
【问题描述】:
我真的很想了解这个接口的重要性,但是除了帮助我们更快地编写之外,具体类中的方法(通过仅实现方法)我就是找不到使用它的必要性。
定义是这样的
声明接受操作的抽象。这是 允许访问者“访问”对象的入口点 目的。 集合中的每个对象都应该在 为了能够被访问
。” 很清楚,但是您仍然可以在每个类中手动编写这些接受方法(我同意这是很多不必要的工作),但除此之外,您还可以在没有 IVisitable 接口的情况下使类可访问...
//IVisitable.java
package Visitor;
/**
*
* @author dragan
*/
public interface IVisitable {
public void accept (Visitor v);
}
// Bgirl.java
public class Bgirl implements IVisitable{
int _br_godina;
public Bgirl(int g) {
br_godina = g;
}
public int getBr_godina() {
return _br_godina;
}
public void accept (Visitor v){
v.visit(this);
}
}
// Main.java
package Visitor;
/**
*
* @author dragan
*/
public class Main {
public static void main(String[] args) {
Bgirl terra = new Bgirl(5);
System.out.println(terra.getBr_godina());
VisitorImplement v = new VisitorImplement();
}
}
// VisitorImplement.java
package Visitor;
/**
*
* @author dragan
*/
public class VisitorImplement implements Visitor{
@Override
public void visit(Bgirl prva) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
prva._br_godina = 3;
}
// @Override
// public void visit(Bboy prvi) {
// // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
// System.out.println("BBOY VISIT");
//
// }
//
}
【问题讨论】:
-
您能告诉我们IVistable接口和定义的来源吗?我所知道的visitorpattern中涉及到两个接口,例如在:en.wikipedia.org/wiki/Visitor_pattern
-
所以据我了解,当你有一个不同对象的数组时它很有用,你可以通过多态调用accept方法?
-
您不需要一个不同对象的数组来作为访问者模式的一个很好的例子。您需要对一些允许访问/实现 IVistable 的不同类进行两种不同的操作。
-
您的问题听起来好像您在问为什么要在大多数设计模式中使用接口——这种抽象有什么好处。如果是这样,那么您将想要获得并阅读一本关于设计模式的好书,例如 Gang of Four 书或 Heads Up 书。
标签: java design-patterns