Главная » Delphi » Delphi 2006 – Шаблон Adapter (Адаптер)

0

 

Структурные шаблоны упрощают процесс формирования сложных структур из имеющихся классов.

Данный шаблон позволяет состыковать два интерфейса. Это требуется, когда заказчику надо взаимодействовать с объектами системы через свой интерфейс, но объекты внутри этой системы предоставляют другие интерфейсы, не совместимые с клиентским (рис. 7.7).

Рис. 7.7. Шаблон Адаптер в Дизайнере модели

TTarget — это интерфейс, который задан с внешней стороны по отношению к имеющейся системе. Пусть в нем имеется метод GetCodeString, который должен возвращать некоторую строку. А в адаптируемом к нему интерфейсе TAdaptee вообще нет никаких методов, а только числовое поле field. Функцию адаптера выполняет класс TAdapter:

type

TTarget = claee abstract public

///<issubroutine>True</issubroutine>

function GetCodeString: string; virtual;abstract;

III

end;

TAdaptee = class public

var

field:integer;

end;

TAdapter = claee(TTarget) strict private var

FAdaptee:TAdaptee;

public

///< i ssubrout ine>True</is subrout ine> function GetCodeString: string; override; constructor Create(AAdaptMe :TAdaptee);

end;

Адаптер реализует переходные функции путем наследования базового интерфейса TTarget, за счет чего внешний пользователь обращается к адаптеру как объекту, реализующему абстрактный интерфейс TTarget. А для взаимодействия с «местным» адаптируемым объектом внутри адаптера имеется поле FAdaptee, которое хранит этот адаптируемый объект (он передается в адаптер сразу в момент конструирования).

constructor TAdapter.Create(AAdaptMe :TAdaptee); begin

inherited Create; FAdaptee := AAdaptMe; end;

Преобразование адаптируемого интерфейса к целевому реализуется внутри метода GetCodeString, унаследованного от интерфейса TTarget. Например, так.

function TAdapter.GetCodeString: string; begin

Result := FAdaptee.field.ToString; end;

Пусть в прикладной программе доступен адаптируемый объект: var ade: TAdaptee;

и подготовлен объект-адаптер var ad: TAdapt er;

Тогда, после того как объект с адаптируемым интерфейсом создан и настроен:

ade:= TAdaptee.Create; ade.field := 5;

формируется объект-адаптер

ad:= TAdapter.Create(ade);

В нем оказывается экземпляр ade, а внешне доступен интерфейс

TTarget:

labell.Text := ad.GetCodeString;

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии