0

我正在编写一种算法,该算法适用于一些系列并执行一些操作,例如移位和与它一起。我想用两种不同的数据结构来测试算法: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 中我将不得不做一个演员,我真的不想要那个(因为速度)。

希望我已经解释得很好,祝你有美好的一天!

尼科

4

3 回答 3

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){
        // ...
    }
}
于 2013-04-10T07:09:14.927 回答
0

这对我来说听起来像是过早的优化。您确定checkcast字节码会对您的整体性能产生如此大的影响吗?我认为这属于“HotSpot 可以做到这一点”。

于 2013-04-10T07:09:17.607 回答
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
}
于 2013-04-10T07:20:47.890 回答