diff --git a/models/designPattern/Bridge.Json b/models/designPattern/Bridge.Json index bfab65f..c344808 100644 --- a/models/designPattern/Bridge.Json +++ b/models/designPattern/Bridge.Json @@ -1,10 +1,10 @@ { "relations": [], "transfer": { - "src": "ConcreteEnchantment", - "dst": "ConcreteWeapon", - "data": { "type": "String", "name": "data" }, - "style": "PULL", + "src": "Main.ConcreteWeapon", + "dst": "Main.ConcreteEnchantment", + "data": { "type": "Data", "name": "data" }, + "style": "PUSH", "multiplicity": "1:1" } } \ No newline at end of file diff --git a/models/designPattern/Chain-of-responsibility.Json b/models/designPattern/Chain-of-responsibility.Json new file mode 100644 index 0000000..843db17 --- /dev/null +++ b/models/designPattern/Chain-of-responsibility.Json @@ -0,0 +1,18 @@ +{ + "name": "Chain-of-responsibility", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Main.OrcKing", + "dst": "Main.OrcKing.{ConcreteOrcRequestHandler}", + "data": { + "type": "Request", + "name": "request" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Command2.Json b/models/designPattern/Command2.Json new file mode 100644 index 0000000..972e4ac --- /dev/null +++ b/models/designPattern/Command2.Json @@ -0,0 +1,31 @@ +{ + "name": "Command", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Main", + "dst": "Main.Wizard", + "data": { + "type": "Goblin", + "name": "goblin" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + }, + { + "relations": [], + "transfer": { + "src": "Main.Wizard", + "dst": "Main.Goblin", + "data": { + "type": "data", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Facade.Json b/models/designPattern/Facade.Json new file mode 100644 index 0000000..bd4c6fc --- /dev/null +++ b/models/designPattern/Facade.Json @@ -0,0 +1,18 @@ +{ + "name" : "Facade", + "contexts" : [ + { + "relations": [], + "transfer": { + "src": "Main", + "dst": "ConcreteDwarvenDigger", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Flyweight.Json b/models/designPattern/Flyweight.Json new file mode 100644 index 0000000..c167b26 --- /dev/null +++ b/models/designPattern/Flyweight.Json @@ -0,0 +1,24 @@ +{ + "name": "Flyweight", + "contexts": [ + { + "relations": [ + { + "src": "Main.PotionFactory.{Potion}", + "dst": "Main.AlchemistShop", + "multiplicity": "1:1" + } + ], + "transfer": { + "src": "Main.PotionFactory.{Potion}", + "dst": "Main.AlchemistShop.TopShelf", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PULL", + "multiplicity": "1:1" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Flyweight2.Json b/models/designPattern/Flyweight2.Json new file mode 100644 index 0000000..ac948d6 --- /dev/null +++ b/models/designPattern/Flyweight2.Json @@ -0,0 +1,31 @@ +{ + "name": "Flyweight", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "AlchemistShop", + "dst": "Main", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PULL", + "multiplicity": "1:1" + } + }, + { + "relations": [], + "transfer": { + "src": "AlchemistShop.{Potion}", + "dst": "AlchemistShop", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PULL", + "multiplicity": "1:1" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Iterator.Json b/models/designPattern/Iterator.Json index 5997071..cd269e0 100644 --- a/models/designPattern/Iterator.Json +++ b/models/designPattern/Iterator.Json @@ -1,10 +1,15 @@ { - "relations": [], - "transfer": { - "src": "TreasureChest", - "dst": "Client", - "data": { "type": "String", "name": "data" }, - "style": "PULL", - "multiplicity": "1:1" - } + "name": "Chain-of-responsibility", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "App.{Item}", + "dst": "App", + "data": { "type": "String", "name": "data" }, + "style": "PULL", + "multiplicity": "1:1" + } + } + ] } \ No newline at end of file diff --git a/models/designPattern/Mediator.Json b/models/designPattern/Mediator.Json new file mode 100644 index 0000000..3356e3e --- /dev/null +++ b/models/designPattern/Mediator.Json @@ -0,0 +1,36 @@ +{ + "name": "Mediator", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Main", + "dst": "PartyImpl", + "data": { "type": "Action", "name": "action" }, + "style": "PUSH", + "multiplicity": "1:1" + } + }, + { + "relations": [], + "transfer": { + "src": "Main", + "dst": "Main.{ConcretePartyMember}", + "data": { "type": "Action", "name": "action" }, + "style": "PUSH", + "multiplicity": "1:1" + } + }, + { + "relations": [ + ], + "transfer": { + "src": "Main.{ConcretePartyMember}", + "dst": "Main.{ConcretePartyMember}", + "data": { "type": "Action", "name": "action" }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Strategy.Json b/models/designPattern/Strategy.Json index f421663..7033955 100644 --- a/models/designPattern/Strategy.Json +++ b/models/designPattern/Strategy.Json @@ -2,14 +2,10 @@ "name": "Strategy", "contexts": [ { - "relations": [{ - "src": "main", - "dst": "main.{concreteStrategy}", - "multiplicity": "1:1" - }], + "relations": [], "transfer": { "src": "main.dragonSlayer", - "dst": "main.{concreteStrategy}", + "dst": "main.concreteStrategy", "data": { "type": "Data", "name": "data" diff --git a/models/designPattern/TemplateMethod.Json b/models/designPattern/TemplateMethod.Json new file mode 100644 index 0000000..71f253f --- /dev/null +++ b/models/designPattern/TemplateMethod.Json @@ -0,0 +1,18 @@ +{ + "name": "TemplateMethod", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Main.HalflingThief", + "dst": "Main.ConcreteMethod", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:1" + } + } + ] +} \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/MediatorInsertion.java b/src/main/java/designPatternExtensions/MediatorInsertion.java index 9dbbf95..5553184 100644 --- a/src/main/java/designPatternExtensions/MediatorInsertion.java +++ b/src/main/java/designPatternExtensions/MediatorInsertion.java @@ -9,6 +9,7 @@ private ObjectNode dst; private ObjectNode mediator; private PushPullValue pushPullValue; + private boolean removeDirectDependency = true; //全デザインパターンに適応出来たら不要になるメソッド public MediatorInsertion(ObjectNode src, ObjectNode dst, ObjectNode mediator, DataTransferContext context) { @@ -19,10 +20,15 @@ } public MediatorInsertion(ObjectNode src, ObjectNode dst, ObjectNode mediator, PushPullValue pushPullValue) { + this(src, dst, mediator, pushPullValue, true); + } + + public MediatorInsertion(ObjectNode src, ObjectNode dst, ObjectNode mediator, PushPullValue pushPullValue, boolean removeDirectDependency) { this.src = src; this.dst = dst; this.mediator = mediator; this.pushPullValue = pushPullValue; + this.removeDirectDependency = removeDirectDependency; } public ObjectNode getSrc() { @@ -40,4 +46,8 @@ public PushPullValue getPushPullValue() { return pushPullValue; } + + public boolean getRemoveDirectDependency() { + return removeDirectDependency; + } } \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java b/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java index 150e6e3..7c6d317 100644 --- a/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java +++ b/src/main/java/designPatternExtensions/designPattern/AbstractFactory.java @@ -11,7 +11,7 @@ public class AbstractFactory implements DesignPattern { public DataTransferDesign create() throws IllegalRelationException { - DataTransferDesign design = ModelLoader.load("models/designPattern/AbstractFactory.Json"); + DataTransferDesign design = ModelLoader.load2("models/designPattern/AbstractFactory.Json"); DataTransferContext dtc = design.getTransferContexts().getFirst(); ObjectNode concreteCastle = dtc.getSrcFirstResource(); ObjectNode app = dtc.getDstFirstResource(); diff --git a/src/main/java/designPatternExtensions/designPattern/Bridge.java b/src/main/java/designPatternExtensions/designPattern/Bridge.java index c179c4b..d0edbf4 100644 --- a/src/main/java/designPatternExtensions/designPattern/Bridge.java +++ b/src/main/java/designPatternExtensions/designPattern/Bridge.java @@ -12,9 +12,9 @@ public class Bridge implements DesignPattern { public DataTransferDesign create() throws IllegalRelationException { - DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); - ObjectNode concreteEnchant = design.getTransferContexts().getFirst().getSrcFirstResource(); - ObjectNode concreteWeapon = design.getTransferContexts().getFirst().getDstFirstResource(); + DataTransferDesign design = ModelLoader.load2("models/designPattern/"+this.getClass().getSimpleName()+".Json"); + ObjectNode concreteWeapon = (ObjectNode) design.getTransferContexts().getFirst().getSrcResource().getEdge(0).getDestination(); + ObjectNode concreteEnchant = (ObjectNode) design.getTransferContexts().getFirst().getDstResource().getEdge(0).getDestination(); DependencyInversion di1 = new DependencyInversion(concreteWeapon, new InterfaceNode(concreteWeapon, "Weapon")); design.addDependencyInversion(di1); diff --git a/src/main/java/designPatternExtensions/designPattern/Chain_of_Responsibility.java b/src/main/java/designPatternExtensions/designPattern/Chain_of_Responsibility.java new file mode 100644 index 0000000..531d9d3 --- /dev/null +++ b/src/main/java/designPatternExtensions/designPattern/Chain_of_Responsibility.java @@ -0,0 +1,50 @@ +package designPatternExtensions.designPattern; + +import designPatternExtensions.DependencyInversion; +import designPatternExtensions.InterfaceNode; +import designPatternExtensions.MediatorInsertion; +import designPatternExtensions.ModelLoader; +import models.deltaAlgebra.ObjectNode; +import models.objectOrientedTransfer.DataTransferContext; +import models.objectOrientedTransfer.DataTransferDesign; +import models.objectOrientedTransfer.IllegalRelationException; +import models.objectOrientedTransfer.PushPullValue; + +import javax.print.attribute.standard.Media; + +//メモ +//https://github.com/iluwatar/java-design-patterns/tree/master/chain-of-responsibility + +public class Chain_of_Responsibility implements DesignPattern { + + public DataTransferDesign create() throws IllegalRelationException { + DataTransferDesign design = ModelLoader.load("models/designPattern/Chain-of-responsibility.Json"); + DataTransferContext dtc = design.getTransferContexts().getFirst(); + ObjectNode main = dtc.getSrcFirstResource(); + ObjectNode concreteOrcRequestHandler = (ObjectNode) dtc.getDstResource().getEdge(1).getDestination(); + //ObjectNode concreteOrcRequestHandler = (ObjectNode) dtc.getDstResource().getEdge(0).getDestination(); + + InterfaceNode requestHandler = new InterfaceNode(concreteOrcRequestHandler, "RequestHandler"); + DependencyInversion di = new DependencyInversion(concreteOrcRequestHandler, requestHandler); + design.addDependencyInversion(di); + +// MediatorInsertion mi = new MediatorInsertion(main, concreteOrcRequestHandler, new ObjectNode("OrcKing"), PushPullValue.PUSH); +// design.addMediatorInsertion(mi); + + return design; + } +} + +/* + (RequestTypeなどは仕様?) + public class Request + + public class ConcreteOrcRequestHandler + + public class OrcKing { + + private List handlers; + } + + ConcreteOrcRequestHandler ---> RequestHandler + */ \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Command.java b/src/main/java/designPatternExtensions/designPattern/Command.java index d4d5f4f..e0b671d 100644 --- a/src/main/java/designPatternExtensions/designPattern/Command.java +++ b/src/main/java/designPatternExtensions/designPattern/Command.java @@ -1,21 +1,63 @@ package designPatternExtensions.designPattern; +import designPatternExtensions.*; import models.deltaAlgebra.ObjectNode; import models.objectOrientedTransfer.*; -import designPatternExtensions.ModelLoader; //メモ //https://github.com/iluwatar/java-design-patterns/tree/master/command //Stackで状態を元に戻したり、やり直したりする //Mainで制御の移譲を行う必要あり? +//public class Command implements DesignPattern { +// +// public DataTransferDesign create() throws IllegalRelationException { +// DataTransferDesign design = ModelLoader.load("models/designPattern/Command2.Json"); +// DataTransferContext dtc = design.getTransferContexts().getFirst(); +// ObjectNode wizard = dtc.getSrcFirstResource(); +// ObjectNode goblin = (ObjectNode) dtc.getDstResource().getEdges().get(0).getDestination(); +// +// DependencyInversion di = new DependencyInversion(goblin, new InterfaceNode(goblin, "Target")); +// design.addDependencyInversion(di); +// +// return design; +// } +//} + public class Command implements DesignPattern { public DataTransferDesign create() throws IllegalRelationException { - DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); - ObjectNode wizard = design.getTransferContexts().getFirst().getSrcFirstResource(); - ObjectNode goblin = design.getTransferContexts().getFirst().getDstFirstResource(); + DataTransferDesign design = ModelLoader.load("models/designPattern/Command2.Json"); + DataTransferContext dtc = design.getTransferContexts().getFirst(); + //ObjectNode main = dtc.getSrcFirstResource(); + ObjectNode goblin = dtc.getDataType(); + +// MediatorInsertion mi = new MediatorInsertion(main, goblin, new ObjectNode("Wizard"), dtc.getTransferStyle(), false); +// design.addMediatorInsertion(mi); + + DependencyInversion di = new DependencyInversion(goblin, new InterfaceNode(goblin, "Target")); + design.addDependencyInversion(di); return design; } - } \ No newline at end of file + } + +//public class Command implements DesignPattern { +// +// public DataTransferDesign create() throws IllegalRelationException { +// DataTransferDesign design = ModelLoader.load2("models/designPattern/"+this.getClass().getSimpleName()+".Json"); +// DataTransferContext dtc = design.getTransferContexts().getFirst(); +// ObjectNode main = dtc.getSrcFirstResource(); +// ObjectNode wizard = (ObjectNode) dtc.getDstResource().getEdges().get(0).getDestination(); +// ObjectNode goblin = dtc.getDataType(); +// +//// ObjectNode wizard = new ObjectNode("Wizard"); +//// MediatorInsertion mi = new MediatorInsertion(main, goblin, wizard, dtc.getTransferStyle()); +//// design.addMediatorInsertion(mi); +// +// DependencyInversion di = new DependencyInversion(goblin, new InterfaceNode(goblin, "Target")); +// design.addDependencyInversion(di); +// +// return design; +// } +//} \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Facade.java b/src/main/java/designPatternExtensions/designPattern/Facade.java new file mode 100644 index 0000000..91df6fa --- /dev/null +++ b/src/main/java/designPatternExtensions/designPattern/Facade.java @@ -0,0 +1,32 @@ +package designPatternExtensions.designPattern; + +import designPatternExtensions.DependencyInversion; +import designPatternExtensions.InterfaceNode; +import designPatternExtensions.MediatorInsertion; +import designPatternExtensions.ModelLoader; +import models.deltaAlgebra.ObjectNode; +import models.objectOrientedTransfer.DataTransferContext; +import models.objectOrientedTransfer.DataTransferDesign; +import models.objectOrientedTransfer.IllegalRelationException; + +//https://github.com/iluwatar/java-design-patterns/tree/master/facade + + +public class Facade implements DesignPattern { + + public DataTransferDesign create() throws IllegalRelationException { + DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); + DataTransferContext dtc = design.getTransferContexts().getFirst(); + ObjectNode main = dtc.getSrcFirstResource(); + ObjectNode concreteDwarvenDigger = dtc.getDstFirstResource(); + + ObjectNode facade = new ObjectNode("DwarvenGoldmineFacade"); + MediatorInsertion mi = new MediatorInsertion(main, concreteDwarvenDigger, facade, dtc.getTransferStyle()); + design.addMediatorInsertion(mi); + + DependencyInversion di = new DependencyInversion(concreteDwarvenDigger, new InterfaceNode(concreteDwarvenDigger, "DwarvenMineWorker")); + design.addDependencyInversion(di); + + return design; + } +} \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Flyweight.java b/src/main/java/designPatternExtensions/designPattern/Flyweight.java new file mode 100644 index 0000000..cdef3e4 --- /dev/null +++ b/src/main/java/designPatternExtensions/designPattern/Flyweight.java @@ -0,0 +1,45 @@ +package designPatternExtensions.designPattern; + +import designPatternExtensions.DependencyInversion; +import designPatternExtensions.InterfaceNode; +import designPatternExtensions.MediatorInsertion; +import designPatternExtensions.ModelLoader; +import models.deltaAlgebra.ObjectNode; +import models.objectOrientedTransfer.DataTransferContext; +import models.objectOrientedTransfer.DataTransferDesign; +import models.objectOrientedTransfer.IllegalRelationException; + +//https://github.com/iluwatar/java-design-patterns/tree/master/facade + + +public class Flyweight implements DesignPattern { + + public DataTransferDesign create() throws IllegalRelationException { + DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); + DataTransferContext dtc = design.getTransferContexts().getLast(); +// ObjectNode potion = (ObjectNode) dtc.getSrcResource().getEdge(0).getDestination(); +// ObjectNode alchemistShop = dtc.getDstFirstResource(); +// +// ObjectNode potionFactory = new ObjectNode("PotionFactory"); +// MediatorInsertion mi = new MediatorInsertion(potion, alchemistShop, potionFactory, dtc.getTransferStyle()); +// design.addMediatorInsertion(mi); + + return design; + } +} + +//public class Flyweight implements DesignPattern { +// +// public DataTransferDesign create() throws IllegalRelationException { +// DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); +// DataTransferContext dtc = design.getTransferContexts().getLast(); +// ObjectNode potion = (ObjectNode) dtc.getSrcResource().getEdge(0).getDestination(); +// ObjectNode alchemistShop = dtc.getDstFirstResource(); +// +// ObjectNode potionFactory = new ObjectNode("PotionFactory"); +// MediatorInsertion mi = new MediatorInsertion(potion, alchemistShop, potionFactory, dtc.getTransferStyle()); +// design.addMediatorInsertion(mi); +// +// return design; +// } +//} \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/Iterator.java b/src/main/java/designPatternExtensions/designPattern/Iterator.java index 5b5dab8..b72574f 100644 --- a/src/main/java/designPatternExtensions/designPattern/Iterator.java +++ b/src/main/java/designPatternExtensions/designPattern/Iterator.java @@ -16,16 +16,16 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); DataTransferContext dtc = design.getTransferContexts().getFirst(); - ObjectNode treasureChest = dtc.getSrcFirstResource(); + ObjectNode item = (ObjectNode) dtc.getSrcResource().getEdge(0).getDestination(); + ObjectNode app = (ObjectNode) dtc.getDstFirstResource(); ObjectNode client = dtc.getDstFirstResource(); - ObjectNode iterator = new ObjectNode("TreasureChestItemIterator"); - MediatorInsertion mi = new MediatorInsertion(client, treasureChest, iterator, dtc); + MediatorInsertion mi = new MediatorInsertion(app, item, new ObjectNode("TreasureChest"), dtc); design.addMediatorInsertion(mi); - DependencyInversion di = new DependencyInversion( - iterator, new InterfaceNode(iterator, "Iterator")); - design.addDependencyInversion(di); +// DependencyInversion di = new DependencyInversion( +// iterator, new InterfaceNode(iterator, "Iterator")); +// design.addDependencyInversion(di); return design; } diff --git a/src/main/java/designPatternExtensions/designPattern/Mediator.java b/src/main/java/designPatternExtensions/designPattern/Mediator.java new file mode 100644 index 0000000..f96da78 --- /dev/null +++ b/src/main/java/designPatternExtensions/designPattern/Mediator.java @@ -0,0 +1,61 @@ +package designPatternExtensions.designPattern; + +import designPatternExtensions.*; +import models.deltaAlgebra.ObjectNode; +import models.objectOrientedTransfer.DataTransferContext; +import models.objectOrientedTransfer.DataTransferDesign; +import models.objectOrientedTransfer.IllegalRelationException; +import models.objectOrientedTransfer.PushPullValue; + +//concretePartyMemberがActionをおこすと、PartyImplからほかのPartyMemberの処理を呼び出す +//https://github.com/iluwatar/java-design-patterns/tree/master/mediator + +public class Mediator implements DesignPattern { + + public DataTransferDesign create() throws IllegalRelationException { + DataTransferDesign design = ModelLoader.load("models/designPattern/" + this.getClass().getSimpleName() + ".Json"); + DataTransferContext dtc = design.getTransferContexts().getFirst(); + ObjectNode main = dtc.getSrcFirstResource(); + ObjectNode partyImpl = dtc.getDstFirstResource(); + DataTransferContext dtc2 = design.getTransferContexts().getLast(); + ObjectNode concretePartyMember = (ObjectNode) dtc2.getDstResource().getEdge(0).getDestination(); + + InterfaceNode partyMemberBase = new InterfaceNode(concretePartyMember, "PartyMemberBase"); + DependencyInversion di = new DependencyInversion(concretePartyMember, partyMemberBase); + design.addDependencyInversion(di); + + InterfaceNode partyMember = new InterfaceNode(partyMemberBase, "PartyMember"); + DependencyInversion di2 = new DependencyInversion(partyMemberBase, partyMember); + design.addDependencyInversion(di2); + + InterfaceNode party = new InterfaceNode(partyImpl, "Party"); + DependencyInversion di3 = new DependencyInversion(partyImpl, party); + design.addDependencyInversion(di3); + + MediatorInsertion mi = new MediatorInsertion(concretePartyMember, concretePartyMember, partyImpl, PushPullValue.PUSH); + design.addMediatorInsertion(mi); + + MediatorInsertion mi2 = new MediatorInsertion(main, concretePartyMember, partyImpl, PushPullValue.PUSH); + design.addMediatorInsertion(mi2); + + return design; + } +} +/* 極端に解釈すると + public abstract class PartyMemberBase{ + protected PartyImpl party; + } + + public class PartyImpl { + private final List members; + } + + Implements + PartyImpl <--- Party + PartyMemberBase <--- PartyMember + ConcretePartyMember <--- PartyMemberBase + + Main -> PartyImpl + Main -> ConcretePartyMember -> PartyImpl(Mediator?) -> List + 2つ目をどうする? + */ \ No newline at end of file diff --git a/src/main/java/designPatternExtensions/designPattern/TemplateMethod.java b/src/main/java/designPatternExtensions/designPattern/TemplateMethod.java index fd5c97b..cae3a1a 100644 --- a/src/main/java/designPatternExtensions/designPattern/TemplateMethod.java +++ b/src/main/java/designPatternExtensions/designPattern/TemplateMethod.java @@ -2,43 +2,25 @@ import designPatternExtensions.DependencyInversion; import designPatternExtensions.InterfaceNode; -import models.deltaAlgebra.MultiplicityValue; +import designPatternExtensions.ModelLoader; import models.deltaAlgebra.ObjectNode; -import models.deltaAlgebra.ReferenceEdge; -import models.objectOrientedTransfer.*; +import models.objectOrientedTransfer.DataTransferContext; +import models.objectOrientedTransfer.DataTransferDesign; +import models.objectOrientedTransfer.IllegalRelationException; -import java.util.ArrayList; -import java.util.List; - -//メモ //https://github.com/iluwatar/java-design-patterns/tree/master/template-method + public class TemplateMethod implements DesignPattern { public DataTransferDesign create() throws IllegalRelationException { - List srcEdges = new ArrayList<>(); - List dstEdges = new ArrayList<>(); - ObjectNode main = new ObjectNode("Main"); - ObjectNode halflingThief = new ObjectNode("HalflingThief"); - ObjectNode subtleMethod = new ObjectNode("SubtleMethod"); - ObjectNode data = new ObjectNode("data"); + DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); + DataTransferContext dtc = design.getTransferContexts().getLast(); + ObjectNode halflingThief = (ObjectNode) dtc.getSrcResource().getEdge(0).getDestination(); + ObjectNode concreteMethod = (ObjectNode) dtc.getDstResource().getEdge(0).getDestination(); - srcEdges.add(new ReferenceEdge(main, halflingThief, "halflingThief")); - dstEdges.add(new ReferenceEdge(main, subtleMethod, "method", "Integer")); - - List 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, "data", PushPullValue.PUSH - ); - - DataTransferDesign design = new DataTransferDesign(context); - - DependencyInversion di = new DependencyInversion( - subtleMethod, new InterfaceNode(subtleMethod, "StealingMethod"), halflingThief - ); + InterfaceNode stealingMethod = new InterfaceNode(concreteMethod, "StealingMethod"); + DependencyInversion di = new DependencyInversion(concreteMethod, stealingMethod); design.addDependencyInversion(di); return design; diff --git a/src/test/java/generator/TestMultipleContexts.java b/src/test/java/generator/TestMultipleContexts.java index a2de08c..60262ab 100644 --- a/src/test/java/generator/TestMultipleContexts.java +++ b/src/test/java/generator/TestMultipleContexts.java @@ -1,6 +1,7 @@ package generator; import generators.ASTGenerator; +import models.deltaAlgebra.*; import models.objectOrientedTransfer.*; import org.junit.jupiter.api.Test; diff --git a/src/test/java/parser/PatternTest.java b/src/test/java/parser/PatternTest.java index 18a783b..dd89978 100644 --- a/src/test/java/parser/PatternTest.java +++ b/src/test/java/parser/PatternTest.java @@ -10,14 +10,15 @@ @Test void adapter() throws Exception { run(new Adapter()); } @Test void bridge() throws Exception { run(new Bridge()); } @Test void builder() throws Exception { run(new Builder()); } -// @Test void chainOfResponsibility() throws Exception { run(new ChainOfResponsibility()); } + @Test void chainOfResponsibility() throws Exception { run(new Chain_of_Responsibility()); } @Test void command() throws Exception { run(new Command()); } @Test void decorator() throws Exception { run(new Decorator()); } -// @Test void facade() throws Exception { run(new Facade()); } + @Test void facade() throws Exception { run(new Facade()); } // @Test void factoryMethod() throws Exception { run(new FactoryMethod()); } + @Test void flyweight() throws Exception { run(new Flyweight()); } // @Test void interpreter() throws Exception { run(new Interpreter()); } @Test void iterator() throws Exception { run(new Iterator()); } -// @Test void mediator() throws Exception { run(new Mediator()); } + @Test void mediator() throws Exception { run(new Mediator()); } @Test void memento() throws Exception { run(new Memento()); } @Test void observer() throws Exception { run(new Observer()); } @Test void prototype() throws Exception { run(new Prototype()); }