0

私は少しセリエで動作し、シフトなどのいくつかの操作を行うアルゴリズムを書いています。MutableBigInteger と BitString ( javabdd ) という 2 つの異なるデータ構造を使用してアルゴリズムをテストしたかったので、スマートな設計パターンを考えてみようと思いました (あまりやらないので)、戦略設計を見つけましたかなり面白いパターン。私が気になる唯一のことは、関数 AND の場合、同じ型を計算する必要があることです。いくつかのコードで説明します:

論文は私の2つの異なるクラスです:

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);

}

このインターフェイスで2つのクラスを拡張しますが、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 に答える