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