Mam następujący przykład wzorca strategii z herew stanie zrozumieć strategiczne wzór
wszystko w tutorialu jest jasne, ale w ten sposób:
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);
}
}
Więc klasa Context oczekuje argumentu strategii w jej konstruktora.
Definicja strategii jest:
public interface Strategy {
public int doOperation(int num1, int num2);
}
Powyższe jest interfejs, klasa Context oczekuje obiekt typu strategii. W klasie StrategyPatternDemo robimy:
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));
}
}
jestem kompletnie zdezorientowany jak mogę init, interfejs zgodnie z definicją:
interfejs różni się od klasy na kilka sposobów, w tym:
Nie można utworzyć instancji interfejsu.
Jak to dokładnie jest ten Context context = new Context(new OperationAdd());
wysłany jako argument do public Context(Strategy strategy){ this.strategy = strategy; }
Musisz utworzyć (przynajmniej) klasę, która implementuje interfejs 'Strategy'. Oczywiście, "OperationAdd" i inni będą takimi klasami. – SJuan76
Przeczytaj Krok 2 w samouczku: "Utwórz konkretne klasy implementujące ten sam interfejs.", Który daje implementacje takie jak 'public class OperationAdd implementuje Strategy {'. To właśnie tworzysz, a nie "Strategię". –
Mam, chcę zrozumieć, jak klasa OperationAdd jest konwertowane na typ strategii? Ponieważ wdraża strategię? Jeśli jestem w trakcie operacji Dodaj, w jaki sposób jest akceptowany jako argument strategii? – User3