1 2input metauml; 3 4 5beginfig(1); 6 7 Class.client("Client")()(); 8 Class.invoker("Invoker")()(); 9 Class.command("Command")()("+Execute()"); 10 Class.receiver("Receiver")()(); 11 Class.concreteC("ConcreteCommand")("+state")("+Execute()"); 12 13 Note.noteConcreteC("Execute()", "{receiver.Action();}"); 14 15 16 client.nw = (0, 0); 17 18 invoker.w = client.e + (40, 0); 19 20 command.w = invoker.e + (100, 0); 21 22 receiver.nw = client.se - (-10, 70); 23 24 concreteC.n = command.s - (0, 60); 25 26 27 noteConcreteC.n = receiver.s + (20, -40); 28 29 30 drawObjects(client, invoker, command, concreteC, receiver, noteConcreteC); 31 32 33 clink(aggregationUni)(command, invoker); 34 35 clink(inheritance)(concreteC, command); 36 37 link(dependency)(pathStepY(client.s + (5, 0), concreteC.n - (25, 0), -30)); 38 39 link(associationUni)(pathStepY(client.s - (5, 0), receiver.w, -81)); 40 41 link(associationUni)(pathHorizontal(concreteC.w, receiver.right)); 42 43 link(dashedLink)(pathStepX(concreteC.sw + (0, 1), noteConcreteC.n, -112)); 44 45 46 item(iAssoc)("<<instantiates>>")(obj.w = client.se + (30, -25)); 47 item(iAssoc)("receiver")(obj.w = receiver.e + (25, 0)); 48 49endfig; 50 51 52end 53 54end 55