Для распределения нагрузки. Есть интерфейс, который поддерживает основной класс и его заместитель. Легкие операции может выполнять заместитель, а тяжелые – основной класс.
program Proxy;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
uProxy in 'uProxy.pas';
var
server: TServer;
si: IServerInterface;
begin
server := TServer.Create();
si := TProxy.Create(server);
try
si.LightOperation();
si.HeavyOperation();
Readln;
finally
server.Free();
end;
end.
Модуль шаблона Proxy
unit uProxy;
interface
uses
System.SysUtils;
type
IServerInterface = interface(IUnknown)
procedure LightOperation();
procedure HeavyOperation();
end;
TServer = class(TInterfacedObject, IServerInterface)
public
procedure LightOperation();
procedure HeavyOperation();
end;
TProxy = class(TInterfacedObject, IServerInterface)
FServer: TServer;
public
constructor Create(aServer: TServer);
procedure LightOperation();
procedure HeavyOperation();
end;
implementation
{ TServer }
procedure TServer.HeavyOperation;
begin
WriteLn('Server: it is heavy, but i am strong and robust server');
end;
procedure TServer.LightOperation;
begin
WriteLn('Server: it is easy, will do that in the second');
end;
{ TProxy }
constructor TProxy.Create(aServer: TServer);
begin
FServer := aServer;
end;
procedure TProxy.HeavyOperation;
begin
WriteLn('Proxy: passing it is to server');
FServer.HeavyOperation();
end;
procedure TProxy.LightOperation;
begin
WriteLn('Proxy: it is easy, will do it by myself');
end;
end.