Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteWithUndoTest[转]
2020-12-13 15:37
标签:des blog http io ar os sp div on 命令模式可以很轻松的实现撤销(Undo)功能。 命令的接受者: 命令对象: 命令的请求者: 客户端,创建具体的命令对象: 运行结果: Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteWithUndoTest[转] 标签:des blog http io ar os sp div on 原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076159.html![]()
1
unit uReceiveObject;
2
3
interface
4
5
type
6
TLight = class(TObject)
7
public
8
procedure Open;
9
procedure Off;
10
end;
11
12
implementation
13
14
{ TLight }
15
16
procedure TLight.Off;
17
begin
18
Writeln(‘Light is off.‘);
19
end;
20
21
procedure TLight.Open;
22
begin
23
Writeln(‘Light is on.‘);
24
end;
25
26
end.
27
![]()
1
unit uCommandObject;
2
3
interface
4
5
uses
6
uReceiveObject;
7
8
type
9
TCommand = class(TObject)
10
public
11
procedure Execute; virtual; abstract;
12
procedure Undo; virtual; abstract;
13
end;
14
15
TLightOnCommand = class(TCommand)
16
private
17
FLight: TLight;
18
public
19
constructor Create(aLight: TLight);
20
procedure Execute; override;
21
procedure Undo; override;
22
end;
23
24
TLightOffCommand = class(TCommand)
25
private
26
FLight: TLight;
27
public
28
constructor Create(aLight: TLight);
29
procedure Execute; override;
30
procedure Undo; override;
31
end;
32
33
implementation
34
35
{ TLightOnCommand }
36
37
constructor TLightOnCommand.Create(aLight: TLight);
38
begin
39
FLight := aLight;
40
end;
41
42
procedure TLightOnCommand.Execute;
43
begin
44
FLight.Open;
45
end;
46
47
procedure TLightOnCommand.Undo;
48
begin
49
FLight.Off;
50
end;
51
52
{ TLightOffCommand }
53
54
constructor TLightOffCommand.Create(aLight: TLight);
55
begin
56
FLight := aLight;
57
end;
58
59
procedure TLightOffCommand.Execute;
60
begin
61
FLight.Off;
62
end;
63
64
procedure TLightOffCommand.Undo;
65
begin
66
FLight.Open;
67
end;
68
69
end.
70
![]()
1
unit uSimpleRemoteWithUndo;
2
3
interface
4
5
uses
6
uCommandObject;
7
8
type
9
TSimpleRemoteWithUndo = class(TObject)
10
private
11
FOnCommand : TCommand;
12
FOffCommand : TCommand;
13
FUndoCommand: TCommand;
14
public
15
procedure SetCommand(aOnCommand, aOffCommand: TCommand);
16
procedure OnButtonWasPressed;
17
procedure OffButtonWasPressed;
18
procedure UndoButtonWasPressed;
19
end;
20
21
implementation
22
23
{ TSimpleRemoteWithUndo }
24
25
procedure TSimpleRemoteWithUndo.OffButtonWasPressed;
26
begin
27
FOffCommand.Execute;
28
FUndoCommand := FOffCommand;
29
end;
30
31
procedure TSimpleRemoteWithUndo.OnButtonWasPressed;
32
begin
33
FOnCommand.Execute;
34
FUndoCommand := FOnCommand;
35
end;
36
37
procedure TSimpleRemoteWithUndo.SetCommand(aOnCommand, aOffCommand: TCommand);
38
begin
39
FOnCommand := aOnCommand;
40
FOffCommand := aOffCommand;
41
end;
42
43
procedure TSimpleRemoteWithUndo.UndoButtonWasPressed;
44
begin
45
FUndoCommand.Undo;
46
end;
47
48
end.
49
![]()
1
program pSimpleRemoteWithUndoTest;
2
3
{$APPTYPE CONSOLE}
4
5
uses
6
uSimpleRemoteWithUndo in ‘uSimpleRemoteWithUndo.pas‘,
7
uCommandObject in ‘uCommandObject.pas‘,
8
uReceiveObject in ‘uReceiveObject.pas‘;
9
10
var
11
Remote: TSimpleRemoteWithUndo;
12
Light : TLight;
13
LightOnCommand : TCommand;
14
LightOffCommand: TCommand;
15
16
begin
17
Remote := TSimpleRemoteWithUndo.Create;
18
19
Light := TLight.Create;
20
21
LightOnCommand := TLightOnCommand.Create(Light);
22
LightOffCommand := TLightOffCommand.Create(Light);
23
24
Remote.SetCommand(LightOnCommand, LightOffCommand);
25
26
Remote.OnButtonWasPressed;
27
Remote.OffButtonWasPressed;
28
Remote.UndoButtonWasPressed;
29
Writeln;
30
Remote.OffButtonWasPressed;
31
Remote.OnButtonWasPressed;
32
Remote.UndoButtonWasPressed;
33
34
Remote.Free;
35
Light.Free;
36
LightOnCommand.Free;
37
LightOffCommand.Free;
38
39
Readln;
40
end.
41
文章标题:Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteWithUndoTest[转]
文章链接:http://soscw.com/essay/35288.html