2

私は通常、ブール値をメソッド引数として受け入れられないで提案されている Enum 引数を採用しますか? 戦略パターンを使用して実装します。

ただし、非静的な Enum がなく、Enum のメソッドにコピーする必要がある途方もない量の変数があるため、Enum に移動できないという複雑なロジックがあります。戦略パターンの代わりにコードでスイッチを使用すると、単純な明快さ以外のすべての利点が失われるようです。

この特定のメソッドの場合、可能性は 2 つしかないので、ブール値の引数の方が受け入れやすいでしょうか? (列挙型が使用されている場合、この場合は不要と思われる不明な列挙型を処理するために、コーディング標準によって要求されます。) ブール値を定数に入れて、定数を使用してメソッドを呼び出すことができるでしょうか?

編集:

複雑なロジックは独自のコードですが、次のようなものです

public void method(A a, B b, boolean replaceMe) {
    // Create and prepare local variables c, d, e, f, g;
    if (replaceMe) {
        // doSomethingWith a, b, c, d, e and return e, f, g
    } else {
       // doSomethingElseWith a, b, c, d, e and return e, f, g
    }
    // Process e, f, g further
}
4

1 に答える 1

2

戦略パターンをもう一度使用できます

public interface DoSomethingWithA2GStrategy { // horrible name I know ;)
    void doSomething(A2GParameterContainer params);
}

コンテナには、次のようなものを作成します。

public class A2GParameterContainer {
    TypeOfA a;
    // ...
    TypeOfG g;

    //getters and setters
}

次に、メソッドを少し変更して、具体的な戦略を渡します

public void method(A a, B b, DoSomethingWithA2GStrategy strategy) {
    // Create and prepare local variables c, d, e, f, g;
    A2GParameterContainer params = new A2GParameterContainer();
    params.setA(a);
    // ...
    params.setG(g);

    strategy.doSomething(params);
    // take e, f, g from the container
    // Process e, f, g further
}
于 2013-07-03T11:32:42.187 に答える