Как правильно имплементировать Abstract Factory шаблон дизайна
У меня есть 2 интерфейса:
public interface Plot {
}
public interface PlotFactory {
Plot plot();
}
и класс:
class PlotFactories {
public PlotFactory classicDisneyPlotFactory(Character h, Character b, Character v) {
return new ClassicDisney();
}
}
чтоб имплементировать метод из public interface PlotFactory создал класс: public class ClassicDisney который возвращает new DisneyPlot();
public class ClassicDisney implements PlotFactory {
@Override
public Plot plot() {
return new DisneyPlot();
}
}
и создал еще класс DisneyPlot который имплементирует Plot и возвращает String в зависимости от параметров метода public PlotFactory classicDisneyPlotFactory(Character h, Character b, Character v).
public class DisneyPlot implements Plot {
@Override
public String toString() {
return "A это парень. A и E молодцы. U никого из них е знает.";
}
}
Код работает но есть одна проблема, как сделать так чтоб мне был возвращен этот же String, но если другие герои есть например B C и D, то возвращенный String будет "B это парень. B и C молодцы. D никого из них е знает.", как запрашивается в тесте
@Test
public void classicDisneyPlotFactory() {
PlotFactory mermaidPlotFactory = factories.classicDisneyPlotFactory(() -> "A", () -> "E", () -> "U");
PlotFactory beautyAndTheBeastPlotFactory = factories.classicDisneyPlotFactory(() -> "B", () -> "D", () -> "G");
PlotFactory lionKingPlotFactory = factories.classicDisneyPlotFactory(() -> "S", () -> "N", () -> "T");
assertEquals(
"A это парень. A и E молодцы. U никого из них е знает.",
mermaidPlotFactory.plot().toString()
);
assertEquals(
"B это парень. B и D молодцы. G никого из них е знает.",
beautyAndTheBeastPlotFactory.plot().toString()
);
assertEquals(
"S это парень. S и N молодцы. T никого из них е знает.",
lionKingPlotFactory.plot().toString()
);
}
Как я понимаю чтоб все вот три теста проходили надо создать if-else в классе class DisneyPlot, но не понимаю что с чем сравнивать нужно.