【发布时间】:2011-06-20 11:54:50
【问题描述】:
我想以这种方式创建访问者模式
public interface Visitable<T>{
public void accept(T visitor);
}
public interface SomeBusinessService implements Visitable<SomeVisitor>{
public void mtd1();
public void mtd2();
}
public abstract class SomeBusinessBean1 implements SomeBusinessService {
public void mtd1(){}
public void mtd2(){}
}
public abstract class SomeBusinessBean2 implements SomeBusinessService {
...
}
等等
那我想创建一个工厂
public class SomeBusinessServiceFactory {
public SomeBusinessService createService
(Class<? extends SomeBusinessService> clazz ){
//do some stuff to create appropriate class derivation on the fly
// that will have accept() method implemented
}
}
我可以通过以下方式调用它
SomeBusinessService service =
SomeBusinessServiceFactory.createService(SomeBusinessBean1.class);
使用这种方法,我不必为所有的 bean 创建 comman 抽象类 实现访问者接口accept()方法。
此解决方案也可用于我们希望特定方法的共同行为取决于每个类层次结构的服务工厂的情况。
有什么方法可以用标准 jdk 做到这一点,或者我可能需要使用 cglib 之类的外部工具,或者我所说的可能是垃圾,我们可以通过其他方式实现这个目标。
高级发送
【问题讨论】:
-
只是为了澄清:
Visitor和Visitable是“相同的”,这是问题中的错字还是您有两个不同的界面? -
通常
Visitor代表可以访问Visitable类的东西。 -
对不起我的坏我ment实现了Visitable。访问者类将只有 visit() 方法,并将适当的类作为输入参数
-
这不就是注释的用途吗?
-
您希望如何通过注释来解决这个问题,因为我不完全理解它。我想要的是类层次结构中几种方法的常见行为,具体取决于工厂方法。因此,例如,如果我创建另一个工厂实现,它可以以其他方式实现抽象方法。所以会符合开闭原则。我想避免 if-else 驱动的开发。
标签: java derived-class visitor-pattern