【发布时间】:2009-06-09 14:55:10
【问题描述】:
我有一组类都需要以某种(个人)方式执行。
通常我会创建一个带有单个doSomething() 方法的DoSomethingInterface,并让每个类以适合每个类需要的方式实现该方法。但是,在这种情况下我不能这样做,因为类定义是不可修改的(自动生成的)
所以,我认为我需要创建一组不同的类,每个类都采用一个自动生成的类并对它们执行操作。所以,假设我有 2 个自动生成的类,Class1 和 Class2,我将首先定义一个通用的 Operator 接口:
public interface Operator <TYPE>{
public void doSomething(TYPE type);
}
然后在每个类中实现其中一个
public class Class1Operator implements Operator<Class1>{
public void doSomething(Class1 type){
...
...
}
}
和
public class Class2Operator implements Operator<Class2>{
public void doSomething(Class2 type){
...
...
}
}
好的,到目前为止一切顺利。现在,鉴于我有一个Class1 类型的对象,有没有什么方法可以在不求助于它的情况下获得它的运算符:
public Operator getOperator(Object obj){
if(obj instanceof Class1){
return new Class1Operator();
}else if(obj instanceof Class2{
return new Class2Operator();
}
return null;
}
这对我来说似乎是一种不好的做法......
我能想到的唯一其他方法是创建一个运算符到类名的映射,如下所示:
Map<Class, Operator> allOperators = new HashMap<Class, Operator>();
allOperators.put(Class1.class, new Class1Operator());
allOperators.put(Class2.class, new Class2Operator());
然后使用返回运算符:
public Operator getOperator(Object obj){
return allOperators.get(obj);
}
但这似乎不对(我不确定,将对象从其类中键控是否有任何问题......)
关于这两种方法是否“正确”的任何意见?还是有更优雅的解决方案??
谢谢
【问题讨论】: