порождающий шаблон проектирования, который задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа. Создание объекта через клонирования.
Применение
избежать дополнительных усилий по созданию объекта стандартным путем
избежать наследования создателя объекта в клиентском приложении, как это делает паттерн "абстрактная фабрика"
Применение
type
TPrototype = class
public
function Clone: TPrototype; virtual; abstract;
end;
TPrototypeType = class(TPrototype)
private
FID: integer;
FInfo: string;
public
property ID: integer read FID write FID;
property Info: string read FInfo write FInfo;
function Clone: FPrototype; override;
end;
function FPrototypeType.Clone: FPrototype;
begin
Result := TPrototypeType.Create;
with FPrototypeType(Result) do
begin
ID := Self.ID;
Info := Self.Info;
end;
end;
var
vConcretePrototype1: TPrototypeType;
vConcretePrototype2: TPrototypeType;
vClone: TPrototype;
begin
vConcretePrototype1 := TPrototypeType.Create;
vConcretePrototype1.ID := 10;
vConcretePrototype1.Info := 'Prototype1';
vConcretePrototype2 := TPrototypeType.Create;
vConcretePrototype2.ID := 11;
vConcretePrototype2.Info := 'Prototype2';
vClone := vConcretePrototype1.Clone;
write(TPrototypeType(vClone).ID);
write(TPrototypeType(vClone).Info);
vClone.Free;
vClone := vConcretePrototype2.Clone;
write(TPrototypeType(vClone).ID);
write(TPrototypeType(vClone).Info);
vClone.Free;
vConcretePrototype1.Free;
vConcretePrototype2.Free;
end.
Комментариев нет:
Отправить комментарий