Продолжение, начало здесь. Контексту нужна ссылка на экземпляр стратегии, которую он будет выполнять. Стратегии нужна ссылка на контекст, из которого она будет брать параметры необходимые для выполнения.
Чтобы не тащить сеттер контекста в стратегии в её интерфейс, родилась реализация через промежуточный абстрактный класс
package com.javarush.task.task18.task1826;
public class Context {
private Strategy strategy;
private String inputFileName;
private String outputFileName;
public Context(Strategy strategy, String inputFileName, String outputFileName) {
this.strategy = strategy;
this.inputFileName = inputFileName;
this.outputFileName = outputFileName;
if (strategy instanceof AbstractStrategy) {
((AbstractStrategy) strategy).setContext(this);
} else {
//do nothing
}
}
public String getInputFileName() {
return inputFileName;
}
public String getOutputFileName() {
return outputFileName;
}
public void execute() {
strategy.execute();
}
}