デザインパターン学習メモ:「Strategy」
目的
GoF本より引用する。
アルゴリズムの集合を定義し、各アルゴリズムをカプセル化して、それらを交換可能にする。Strategyパターンを利用することで、アルゴリズムを、それを利用するクライアントからは独立に変更することができるようになる。
Stateパターンとよく似ている。
http://qiita.com/mokrai/items/2caf83112c4b92d2ebe7
実装例
3つの数の足し算を行う。二つの計算アルゴリズムを用意する。一つは普通に掛け算する方法。もう一つは、足し算をループして非効率的に計算する方法。
MultiplicationContext.java
// Context役
public class MultiplicationContext {
private Multiplication strategy;
public MultiplicationContext(Multiplication stratagy) {
this.strategy = stratagy;
}
public int calculate(int l, int m, int n) {
return strategy.calculate(l, m, n);
}
}
Multiplication.java
// Strategy役
// 掛け算をする
public interface Multiplication {
int calculate(int l, int m, int n);
}
NomalMultiplication.java
// ConcreteStrategy役
public class NomalMultiplication implements Multiplication {
// ふつうに計算する
@Override
public int calculate(int l, int m, int n) {
return l * m * n;
}
}
MultiplicationByAddition.java
//ConcreteStrategy役
public class MultiplicationByAddition implements Multiplication {
// 足し算のループで非効率な計算
@Override
public int calculate(int l, int m, int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
int intermediateResult = 0;
for (int j = 0; j < m; j++) {
intermediateResult += l;
}
sum += intermediateResult;
}
return sum;
}
}
実行例
Main.java
public class Main {
public static void main(String[] args) {
MultiplicationContext contextA = new MultiplicationContext(new NomalMultiplication());
int resultA = contextA.calculate(200,300,400);
System.out.println(resultA);
MultiplicationContext contextB = new MultiplicationContext(new MultiplicationByAddition());
int resultB = contextB.calculate(200,300,400);
System.out.println(resultB);
}
}
結果
24000000
24000000
参考文献
- エリック ガンマ、ラルフ ジョンソン、リチャード ヘルム、ジョン プリシディース(1999)『オブジェクト指向における再利用のためのデザインパターン 改訂版』本位田 真一、吉田 和樹 監訳、SBクリエイティブ
Author And Source
この問題について(デザインパターン学習メモ:「Strategy」), 我々は、より多くの情報をここで見つけました https://qiita.com/aki3061/items/70c4d353177a5da99cb9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .