Status:
Fendy と Glen Best の回答はどちらも同じように受け入れられ、尊重されますが、一方が受け入れられて賞金が与えられる可能性があるため、Fendy の回答を選択します。
Scenario:
多くのクラスで何度も再利用する必要があるコード(明らかな小さなパラメーターの変更はめったにありません) と同時実行スレッドがある場合、どのアプローチを採用しますか?
再利用する必要があるコードは、(静的および非静的コンテキストを適切に考慮し、メソッド作成手法を考慮して) 適切なものであれば何でもかまいません。これは、アルゴリズム、接続、操作、クローズを行う DB メソッドの場合があります。なんでも。
いくつかのクラスを似たものにして、それらすべてのメソッドをその中
MyMethods.class
に入れます。1.a. メソッドを作成し、(すべてのクラスと同時スレッドによって) を次のように直接呼び出します。
static
MyMethods.someMethod();
1.b. メソッドを
non-static
作成し、それらを呼び出す時点で、instantiate
クラス全体をMyMethods mm = MyMethods(); mm.someMethod();
https://en.wikipedia.org/wiki/Strategy_patternに記載されている戦略パターンを使用します(コードはここに添付されています)。
https://en.wikipedia.org/wiki/Dependency_injection#Javaに記載されている依存性注入を使用する
Problems:
一部の人々は、ユニット テスト http://en.wikipedia.org/wiki/Unit_testing はこのアプローチでは不可能であり、後者を交換する際に問題が発生すると言うでしょう。クラスをテストし、依存関係のモック バージョンを使用する場合
1.a. 同時呼び出しや複数のクラスに問題はありますか? 例として特別に
JDBC static methods
?1.b. クラス全体が1つまたは2つのメソッドを呼び出すだけで何度も発生するため、メモリ負荷がかかりすぎると思います
instanticated
それは私の頭をはるかに超えています。それと、または利点/欠点を説明してください
この質問のコンテキストでフレームワークを使用したくありません..それは私の頭をはるかに超えています。それと、または利点/欠点を説明してください
もしあれば、他の戦略や推奨事項を待っています。
Request:
あなたが経験豊富で、その意味を深く知っていて、あなたの答えが私とコミュニティ全体を包括的に助けることができる場合にのみ、答えてください!
Code:
/** The classes that implement a concrete strategy should implement this.
* The Context class uses this to call the concrete strategy. */
interface Strategy {
int execute(int a, int b);
}
/** Implements the algorithm using the strategy interface */
class Add implements Strategy {
public int execute(int a, int b) {
System.out.println("Called Add's execute()");
return a + b; // Do an addition with a and b
}
}
class Subtract implements Strategy {
public int execute(int a, int b) {
System.out.println("Called Subtract's execute()");
return a - b; // Do a subtraction with a and b
}
}
class Multiply implements Strategy {
public int execute(int a, int b) {
System.out.println("Called Multiply's execute()");
return a * b; // Do a multiplication with a and b
}
}
// Configured with a ConcreteStrategy object and maintains
// a reference to a Strategy object
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return this.strategy.execute(a, b);
}
}
/** Tests the pattern */
class StrategyExample {
public static void main(String[] args) {
Context context;
// Three contexts following different strategies
context = new Context(new Add());
int resultA = context.executeStrategy(3,4);
context = new Context(new Subtract());
int resultB = context.executeStrategy(3,4);
context = new Context(new Multiply());
int resultC = context.executeStrategy(3,4);
System.out.println("Result A : " + resultA );
System.out.println("Result B : " + resultB );
System.out.println("Result C : " + resultC );
}
}