我有2个类实现了这样的相同接口..
// Interface
Interface ISomething { ... }
// Class A
class A implements ISomething { ... }
// Class B
class B implements ISomething { ... }
然后在ArrayList<ISomething>
我有很多A类和B类的实例。
有没有办法在不使用instanceof
. 我绑定了许多方法(例如在 A 类和 B 类中创建新方法,让他们决定是否应该增加哪些计数变量保存在传递给他们的整数数组中),但它们似乎不是好的设计。
PS。对不起,我的英语和 Java 和 OO 设计方面的技能不足。如果这是一个不好的问题,请告诉我。
更新
我尝试了 visitor_pattern并且它有效(它比我之前使用的方法更易于维护)。
代码是这样的。。
// Interfaces
Interface ISomething { public void accept(ISomethingVisitor visitor); }
Interface ISomethingVisitor {
public void visit(A a);
public void visit(B b);
}
// Classes
class A implements ISomething {
@Override
public void accept(ISomethingVisitor visitor) { visitor.visit(this); }
}
class B implements ISomething {
@Override
public void accept(ISomethingVisitor visitor) { visitor.visit(this); }
}
class SomethingCountVisitor implements ISomethingVisitor {
private int aCount;
private int bCount;
@Override
public void visit(A a) { aCount++; }
@Override
public void visit(B b) { bCount++; }
//getters for aCount, bCount
}
// Example usage
// Assuming items have many A and B instances.
ArrayList<ISomething> items = new ArrayList<ISomething>();
...
SomethingCountVisitor scVisitor = new SomethingCountVisitor();
for (ISomething item in items)
item.accept(scVisitor);