不同类型(相同的接口)我有2类实现这样相同的接口..计数用于ArrayList的
// Interface
Interface ISomething { ... }
// Class A
class A implements ISomething { ... }
// Class B
class B implements ISomething { ... }
然后在ArrayList<ISomething>
我都A类的许多实例和B.
有没有一种方法可以单独计算A类和B类的出现次数,而不使用instanceof
。我绑定了很多方法(比如在A类和B类中创建新的方法,让他们决定是否应该增加保存在传递给它们的整数数组中的计数变量),但它们似乎并不是很好的设计。
PS。对不起,我的英语和Java和OO设计缺乏技能。如果这是一个不好的问题,请让我知道。
UPDATE
我试图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);
问:为什么你有ISomething,并在你需要算多少各亚型istances存在同一时间的列表?在我看来,A和B的2个列表会更好 –
关心它是哪个类可能是不可取的,但如果那是最重要的,instanceof就是找出问题的简单而直接的方法。为什么要避免它? –
添加新元素时,我希望只要它实现ISomething,新元素的类型无关紧要。这是一个糟糕的设计? –