DesignPatterns. Proxy

Для распределения нагрузки. Есть интерфейс, который поддерживает основной класс и его заместитель. Легкие операции может выполнять заместитель, а тяжелые – основной класс.

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.
This entry was posted in Без рубрики. Bookmark the permalink.