我正在编写一个算法,它可以在一个系列上运行,并执行一些操作,例如shift,AND。我想用两种不同的数据结构测试算法:MutableBigInteger和BitString(javabdd),所以我想我会尝试提出一些智能设计模式(因为我不做那么多),我发现了策略设计模式很有趣。唯一困扰我的是,对于函数AND,它需要计算相同的类型。我用一些代码解释:
论文是我的两个不同的课程:
public class MutableBigInteger {
public void shift();
public void and(MutableBigInteger b2){
// ...
}
}
public class BitString {
public void shift();
public void and(BitString b2){
// ...
}
}
我想在我的课上创建一个设计,我只选择这些类之间的算法。算法如下:
while( ... ) {
bittrain.shift();
bittrain.and(bittrain2);
}
对我来说,问题是如何使用函数AND来实现它,因为每个我自己的类在参数中等待相同的类。我以为我喜欢这个:
public interface BitTrain {
public void shift();
public void and(BitTrain b2);
}
并使用此接口扩展我的两个类,但它并没有真正帮助我,因为在MutableBigInteger和BitString中我将不得不做一个演员,我真的不想那样(因为速度)。
希望我已经解释得很好,祝你有个美好的一天!
尼科
答案 0 :(得分:3)
不要认为这是最干净的方式,但你可以使用泛型:
public interface BitTrain<T extends BitTrain<?>> {
public void shift();
public void and(T b2);
}
然后实现如下界面:
public class MutableBigInteger implements BitTrain<MutableBigInteger> {
public void shift();
public void and(MutableBigInteger b2){
// ...
}
}
答案 1 :(得分:0)
这听起来像对我来说过早优化。您确定checkcast
字节码会对您的整体性能产生多大影响吗?我认为这属于#34; HotSpot可以做到这一点&#34;。
答案 2 :(得分:0)
我完全不理解这个问题,但你是否有机会考虑模板模式
public class MyBitOperation<T> {
T b1;
public MyBitOperation(T b) {
b1= b;
}
public void shift(){
//TODO: DO something
}
public void and(T b2){
//Do somehting else
}