策略设计模式(带参数方法) - JAVA

时间:2013-04-10 06:55:03

标签: java design-patterns strategy-pattern

我正在编写一个算法,它可以在一个系列上运行,并执行一些操作,例如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中我将不得不做一个演员,我真的不想那样(因为速度)。

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

尼科

3 个答案:

答案 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
}