diff --git a/models/designPattern/Chain-of-responsibility.Json b/models/designPattern/Chain-of-responsibility.Json index 843db17..28a66b5 100644 --- a/models/designPattern/Chain-of-responsibility.Json +++ b/models/designPattern/Chain-of-responsibility.Json @@ -4,14 +4,14 @@ { "relations": [], "transfer": { - "src": "Main.OrcKing", + "src": "Main", "dst": "Main.OrcKing.{ConcreteOrcRequestHandler}", "data": { "type": "Request", "name": "request" }, "style": "PUSH", - "multiplicity": "1:1" + "multiplicity": "1:*" } } ] diff --git a/models/designPattern/Facade.Json b/models/designPattern/Facade.Json index bd4c6fc..e7f5b1f 100644 --- a/models/designPattern/Facade.Json +++ b/models/designPattern/Facade.Json @@ -2,16 +2,22 @@ "name" : "Facade", "contexts" : [ { - "relations": [], + "relations": [ + { + "src": "Main", + "dst": "Main.DwarvenGoldmineFacade.{ConcreteDwarvenDigger}", + "multiplicity": "1:1" + } + ], "transfer": { "src": "Main", - "dst": "ConcreteDwarvenDigger", + "dst": "Main.DwarvenGoldmineFacade.{ConcreteDwarvenDigger}", "data": { "type": "Data", "name": "data" }, "style": "PUSH", - "multiplicity": "1:1" + "multiplicity": "1:*" } } ] diff --git a/models/designPattern/Flyweight.Json b/models/designPattern/Flyweight.Json index c167b26..bfa4d32 100644 --- a/models/designPattern/Flyweight.Json +++ b/models/designPattern/Flyweight.Json @@ -4,20 +4,33 @@ { "relations": [ { - "src": "Main.PotionFactory.{Potion}", - "dst": "Main.AlchemistShop", + "src": "Main.AlchemistShop", + "dst": "Main.AlchemistShop.TopShelf.{Potion}", "multiplicity": "1:1" } ], "transfer": { - "src": "Main.PotionFactory.{Potion}", - "dst": "Main.AlchemistShop.TopShelf", + "src": "Main.AlchemistShop.PotionFactory.{Potion}", + "dst": "Main.AlchemistShop.TopShelf.{Potion}", "data": { "type": "Data", "name": "data" }, "style": "PULL", - "multiplicity": "1:1" + "multiplicity": "*:1" + } + }, + { + "relations": [], + "transfer": { + "src": "Main", + "dst": "Main.AlchemistShop.TopShelf.{Potion}", + "data": { + "type": "Data", + "name": "data" + }, + "style": "PUSH", + "multiplicity": "1:*" } } ] diff --git a/models/designPattern/Mediator.Json b/models/designPattern/Mediator.Json index 3356e3e..d2a1c4e 100644 --- a/models/designPattern/Mediator.Json +++ b/models/designPattern/Mediator.Json @@ -29,7 +29,7 @@ "dst": "Main.{ConcretePartyMember}", "data": { "type": "Action", "name": "action" }, "style": "PUSH", - "multiplicity": "1:1" + "multiplicity": "1:*" } } ] diff --git a/models/designPattern/Mediator2.Json b/models/designPattern/Mediator2.Json new file mode 100644 index 0000000..ee80533 --- /dev/null +++ b/models/designPattern/Mediator2.Json @@ -0,0 +1,26 @@ +{ + "name": "Mediator", + "contexts": [ + { + "relations": [], + "transfer": { + "src": "Main", + "dst": "Main.PartyImpl.{ConcretePartyMember}", + "data": { "type": "Action", "name": "action" }, + "style": "PUSH", + "multiplicity": "1:1" + } + }, + { + "relations": [ + ], + "transfer": { + "src": "Main.PartyImpl.{ConcretePartyMember}", + "dst": "Main.PartyImpl.{ConcretePartyMember}", + "data": { "type": "Action", "name": "action" }, + "style": "PUSH", + "multiplicity": "1:*" + } + } + ] +} \ No newline at end of file diff --git a/models/designPattern/Observer.Json b/models/designPattern/Observer.Json index bd194d0..769a19e 100644 --- a/models/designPattern/Observer.Json +++ b/models/designPattern/Observer.Json @@ -2,29 +2,35 @@ "name": "Observer", "contexts": [ { - "relations": [], + "relations": [ + { + "src": "Main", + "dst": "Main.Weather.{ConcreteObserver}", + "multiplicity": "1:1" + } + ], "transfer": { "src": "Main.Weather", - "dst": "ConcreteObserver", + "dst": "Main.Weather.{ConcreteObserver}", "data": { "type": "Data", "name": "data" }, "style": "PUSH", - "multiplicity": "1:1" + "multiplicity": "1:*" } }, { "relations": [], "transfer": { "src": "Main", - "dst": "Weather", + "dst": "Main.Weather", "data": { "type": "ConcreteObserver", "name": "concreteObserver" }, "style": "PUSH", - "multiplicity": "1:1" + "multiplicity": "1:*" } } ] diff --git a/src/main/java/designPatternExtensions/designPattern/Facade.java b/src/main/java/designPatternExtensions/designPattern/Facade.java index 91df6fa..fd5600d 100644 --- a/src/main/java/designPatternExtensions/designPattern/Facade.java +++ b/src/main/java/designPatternExtensions/designPattern/Facade.java @@ -18,11 +18,7 @@ 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); + ObjectNode concreteDwarvenDigger = (ObjectNode) dtc.getDstResource().getEdge(1).getDestination(); DependencyInversion di = new DependencyInversion(concreteDwarvenDigger, new InterfaceNode(concreteDwarvenDigger, "DwarvenMineWorker")); design.addDependencyInversion(di); diff --git a/src/main/java/designPatternExtensions/designPattern/Mediator2.java b/src/main/java/designPatternExtensions/designPattern/Mediator2.java new file mode 100644 index 0000000..6bb9e85 --- /dev/null +++ b/src/main/java/designPatternExtensions/designPattern/Mediator2.java @@ -0,0 +1,63 @@ +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; + +//concretePartyMemberがActionをおこすと、PartyImplからほかのPartyMemberの処理を呼び出す +//https://github.com/iluwatar/java-design-patterns/tree/master/mediator + +public class Mediator2 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 = (ObjectNode) dtc.getDstResource().getEdge(0).getDestination(); + ObjectNode concretePartyMember = (ObjectNode) dtc.getDstResource().getEdge(1).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/Observer.java b/src/main/java/designPatternExtensions/designPattern/Observer.java index 4d2ab90..8d8ac56 100644 --- a/src/main/java/designPatternExtensions/designPattern/Observer.java +++ b/src/main/java/designPatternExtensions/designPattern/Observer.java @@ -17,8 +17,7 @@ public DataTransferDesign create() throws IllegalRelationException { DataTransferDesign design = ModelLoader.load("models/designPattern/"+this.getClass().getSimpleName()+".Json"); DataTransferContext dtc = design.getTransferContexts().getFirst(); - ObjectNode weather = (ObjectNode) dtc.getSrcResource().getEdge(0).getDestination(); - ObjectNode concreteObserver = dtc.getDstFirstResource(); + ObjectNode concreteObserver = (ObjectNode) dtc.getDstResource().getEdge(1).getDestination(); DependencyInversion di1 = new DependencyInversion(concreteObserver, new InterfaceNode(concreteObserver, "WeatherObserver")); design.addDependencyInversion(di1); diff --git a/src/main/java/designPatternExtensions/designPattern/State.java b/src/main/java/designPatternExtensions/designPattern/State.java index 2c6d4f8..d700da6 100644 --- a/src/main/java/designPatternExtensions/designPattern/State.java +++ b/src/main/java/designPatternExtensions/designPattern/State.java @@ -15,10 +15,6 @@ ObjectNode main = design.getTransferContexts().getFirst().getSrcFirstResource(); ObjectNode concreteState = (ObjectNode) design.getTransferContexts().getFirst().getSrcResource().getEdge(1).getDestination(); -// MediatorInsertion mi = new MediatorInsertion( -// main, concreteState, new ObjectNode("Mammoth")); -// design.addMediatorInsertion(mi); - DependencyInversion di = new DependencyInversion( concreteState, new InterfaceNode(concreteState, "State")); design.addDependencyInversion(di); diff --git a/src/test/java/parser/PatternTest.java b/src/test/java/parser/PatternTest.java index 27b46e4..1694cc3 100644 --- a/src/test/java/parser/PatternTest.java +++ b/src/test/java/parser/PatternTest.java @@ -19,7 +19,7 @@ @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 Mediator2()); } @Test void memento() throws Exception { run(new Memento()); } @Test void observer() throws Exception { run(new Observer()); } @Test void prototype() throws Exception { run(new Prototype()); }