2011-02-03 51 views
2

我想以这样的方式来创建访问者模式类派生 - 访问者模式

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); 

使用这种方法,我不必为所有实现Visitor接口accept()方法的bean创建comman抽象类。

这个解决方案也可以用在我们希望根据每个类层次结构的服务工厂具有特定方法的通用行为的情况中。

有没有办法做到这一点与标准的JDK或也许我需要使用外部工具,如CGLIB也许我说的是垃圾,我们可以achive在一些其他的方式实现这一目标。

的Tx先进

+0

只是为了clarificatin:`Visitor`和`Visitable`“相同”,它是在问题的错字或者你有两个不同的接口? – 2011-02-03 08:08:02

+0

通常,“访问者”代表可访问“可访问”类的内容。 – aioobe 2011-02-03 08:14:47

回答

0

如果你正在寻找一种方式来从它的类的对象创建类的实例比看看Java反射API。

clazz.newInstanze(); 

clazz.getConstructors(...).newInstance(...);