を理解することができませんすべてが明確ではなく、このです:私は<a href="http://www.tutorialspoint.com/design_pattern/strategy_pattern.htm">here</a></p> <p>から戦略パターンの例を、以下の午前Strategyパターン
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2){
return strategy.doOperation(num1, num2);
}
}
だから、Contextクラスがそのコンストラクタで戦略引数を期待しています。
戦略の定義は:インターフェースである上記
public interface Strategy {
public int doOperation(int num1, int num2);
}
ザ、コンテキストクラスタイプ戦略のオブジェクトを期待します。定義によれば
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationSubstract());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationMultiply());
System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
}
}
私たちはカントとして全く混乱していますインターフェイスを初期化:StrategyPatternDemoクラスでは、我々はやる
インタフェースには、いくつかの方法でクラスとは異なります。
インタフェースをインスタンス化することはできません。
public class OperationSubstract implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
... // etc.
ここではいくつかの「操作があることがわかります。このContext context = new Context(new OperationAdd());
あなたはおそらく例の冒頭で、これらの行が欠落しているpublic Context(Strategy strategy){ this.strategy = strategy; }
'少なくとも'戦略 'インターフェイスを実装するクラスを作成する必要があります。明らかに、「OperationAdd」と他のクラスはそのようなクラスになります。 – SJuan76
チュートリアル:「同じインタフェースを実装する具象クラスを作成する」のステップ2を読んでください。これは 'public class OperationAdd Strategic {'を実装します。それが「戦略」ではなく、あなたが具体化しているものです。 –
私は、クラスOperationAddが戦略タイプにどのように変換されるのか理解したいと思いますか?それは戦略を実装しているからですか?私がオペレーションを開始している場合、それをストラテジー引数としてどのように受け入れますか? – User3