1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
var
CTX1,CTX2,CTX3 : TContext;
N : integer;
const
States : array[0..2] of TStateClass = (TStateA, TStateB, TStateC);
begin
Randomize;
try
CTX1 := TContext.Create;
CTX2 := TContext.Create;
CTX3 := TContext.Create;
try
writeln('State get A = ', CTX1.getState(TStateA).Value );
writeln('State get B = ', CTX1.getState(TStateB).Value );
writeln('State get C = ', CTX1.getState(TStateC).Value );
writeln('');
writeln('State set A = ', TStateA.setState(CTX1).Value );
writeln('State set B = ', TStateB.setState(CTX1).Value );
writeln('State set C = ', TStateC.setState(CTX1).Value );
writeln('');
// un état alléatoire, on ne sais pas lequel
States[random(100) mod 3].setState(CTX1);
// synchro CTX2 et CTX3
CTX1.State.setState(CTX2).setState(CTX3);
writeln('State of CTX1 is ', CTX1.State.ClassName, ' = ', CTX1.State.Value );
writeln('State of CTX2 is ', CTX2.State.ClassName, ' = ', CTX2.State.Value );
writeln('State of CTX3 is ', CTX3.State.ClassName, ' = ', CTX3.State.Value );
writeln('');
// stress test
for N := 0 to 2 do
begin
// un autre état alléatoire, on ne sais pas lequel mais doit être différent
// de l'ancien contenus dans CTX2
repeat
States[random(100) mod 3].setState(CTX1);
until CTX1.State.ClassType <> CTX2.State.ClassType;
// synchro CTX2 et CTX3
CTX1.State.setState(CTX2).setState(CTX3);
writeln('State of CTX1 is ', CTX1.State.ClassName, ' = ', CTX1.State.Value );
writeln('State of CTX2 is ', CTX2.State.ClassName, ' = ', CTX2.State.Value );
writeln('State of CTX3 is ', CTX3.State.ClassName, ' = ', CTX3.State.Value );
writeln('');
end;
finally
CTX3.Free;
CTX2.Free;
CTX1.Free;
end;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
readLn;
end. |
Partager