package designPatternExtensions.designPattern;
//メモ
//https://github.com/iluwatar/java-design-patterns/tree/master/visitor
//Commander->Sergent(Children) 1:多の転送ができないため不可能
//制御の委譲をできるようにする必要がある(自分の作業)
import designPatternExtensions.DependencyInversion;
import designPatternExtensions.InterfaceNode;
import models.objectOrientedTransfer.*;
import java.util.ArrayList;
import java.util.List;
public class Visitor implements DesignPattern{
public DataTransferDesign create() throws IllegalRelationException {
List<ReferenceEdge> srcEdges = new ArrayList<>();
List<ReferenceEdge> dstEdges = new ArrayList<>();
ObjectNode commander = new ObjectNode("Commander");
ObjectNode sergent = new ObjectNode("Sergent");
ObjectNode soldier = new ObjectNode("Soldier");
ObjectNode client = new ObjectNode("Client");
ObjectNode main = new ObjectNode("Main");
ObjectNode visitor = new ObjectNode("SoldierVisitor");
ReferenceEdge srcEdge = new ReferenceEdge(commander, sergent, "children", "Integer");
srcEdges.add(srcEdge);
srcEdge = new ReferenceEdge(sergent, soldier, "children", "Integer");
srcEdges.add(srcEdge);
ReferenceEdge dstEdge = new ReferenceEdge(main, client, "client");
dstEdges.add(dstEdge);
Relation transferRelation = new Relation(srcEdges, dstEdges, MultiplicityValue.OneToOne);
DataTransferContext context = new DataTransferContext(
new ArrayList<>(), transferRelation, visitor, "visitor", PushPullValue.PULL
);
DataTransferDesign design = new DataTransferDesign(context);
DependencyInversion di = new DependencyInversion(
visitor, new InterfaceNode(visitor, "UnitVisitor"), commander
);
design.addDependencyInversion(di);
return design;
}
}