
type
IImage = interface
procedure Display;
end;
TRealImage = class(TInterfacedObject,
IImage)
private
FFileName: string;
public
constructor Create(
const AFileName: string);
procedure Display;
end;
//proxy delays the heavy object
//until it is really needed
TImageProxy = class(TInterfacedObject,
IImage)
private
FFileName: string;
FReal: IImage;
public
constructor Create(
const AFileName: string);
procedure Display;
end;
constructor TRealImage.Create(
const AFileName: string);
begin
FFileName := AFileName;
WriteLn('loading ', FFileName);
end;
procedure TRealImage.Display;
begin
WriteLn('display ', FFileName);
end;
constructor TImageProxy.Create(
const AFileName: string);
begin
FFileName := AFileName;
end;
procedure TImageProxy.Display;
begin
if FReal = nil then
FReal := TRealImage.Create(FFileName);
FReal.Display;
end;
var
Image: IImage;
begin
Image := TImageProxy.Create('photo.png');
WriteLn('proxy created, nothing loaded');
Image.Display;
//loading photo.png
//display photo.png
end.
| Подменяет другой объект для контроля доступа к нему. Заместитель реализует интерфейс первоначального объекта. |