порождающий шаблон проектирования, который задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа. Создание объекта через клонирования.
Применение
избежать дополнительных усилий по созданию объекта стандартным путем
избежать наследования создателя объекта в клиентском приложении, как это делает паттерн "абстрактная фабрика"
Применение
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.
Комментариев нет:
Отправить комментарий