понедельник, 16 апреля 2012 г.

Прототип

порождающий шаблон проектирования, который задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа. Создание объекта через клонирования.


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

    Комментариев нет:

    Отправить комментарий