package designPatternExtensions;
import models.objectOrientedTransfer.*;
import java.util.ArrayList;
import java.util.List;
//https://github.com/iluwatar/java-design-patterns/tree/master/strategy
//同じ役割の実装クラスを複数用意できない(メソッドが空になる?)
public class Strategy {
public static DataTransferDesign create() throws IllegalRelationException {
List<ReferenceEdge> srcEdges = new ArrayList<>();
List<ReferenceEdge> dstEdges = new ArrayList<>();
ObjectNode main = new ObjectNode("Main");
ObjectNode dragonSlayer = new ObjectNode("DragonSlayer");
ObjectNode meleeStrategy = new ObjectNode("MeleeStrategy");
ObjectNode data = new ObjectNode("BattleExecute");
srcEdges.add(new ReferenceEdge(main, dragonSlayer, "dragonSlayer"));
dstEdges.add(new ReferenceEdge(main, meleeStrategy, "meleeStrategy", "Integer"));
List<Relation> relations = new ArrayList<>();
relations.add(new Relation(main, dstEdges, MultiplicityValue.OneToOne));
Relation transferRelation = new Relation(srcEdges, dstEdges, MultiplicityValue.OneToOne);
DataTransferContext context = new DataTransferContext(relations, transferRelation, data, "battleExecute", PushPullValue.PUSH);
DataTransferDesign design = new DataTransferDesign(context);
DependencyInversion di = new DependencyInversion(
meleeStrategy, new InterfaceNode(meleeStrategy, "DragonSlayingStrategy"), dragonSlayer
);
design.addDependencyInversion(di);
return design;
}
}