Форум: "Прочее";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
ВнизКак называется паттерн? Найти похожие ветки
← →
О-Сознание (2013-04-13 19:36) [0]Есть класс, который должен поддерживать некоторые (может все) функции класса TMyList + свои.
В 1-м случае просто наследуемся.
Во 2-м работаем с переменной.
Так вот, как называется 2-й вариант?
Адаптер?
type
TMyClass_1 = class (TMyList)
end;
TMyClass_2 = class
private
FList: TMyList;
end;
← →
MBo © (2013-04-13 19:50) [1]По первой фраз - декоратор
Остальное я не понял :(
← →
О-Сознание (2013-04-13 20:38) [2]1-й случай это TMyClass_1.
2-й случай это TMyClass_2.
← →
DVM © (2013-04-13 20:47) [3]
> О-Сознание (13.04.13 19:36)
> Так вот, как называется 2-й вариант?
Декоратор, Обертка, в некоторых случаях Прокси
← →
Дмитрий С © (2013-04-13 20:54) [4]2. Агрегирование?
← →
DVM © (2013-04-13 21:00) [5]Хотя вообще то именно в таком виде
TMyClass_2 = class
private
FList: TMyList;
end;
это просто [4] и вообще никакой не паттерн, паттерном был бы такой вариант:
TMyClass_2 = class(TMyList)
private
FList: TMyList;
...
end;
← →
clickmaker © (2013-04-15 13:46) [6]> был бы такой вариант:
>
> TMyClass_2 = class(TMyList)
> private
> FList: TMyList;
наследуемся да еще и оборачиваем?
← →
DVM © (2013-04-15 15:59) [7]
> clickmaker © (15.04.13 13:46) [6]
> наследуемся да еще и оборачиваем?
да, распространенная практика, например при создании фильтров на базе TStream:
////////////////////////////////////////////////////////////////////////////////
// TStreamProxy
////////////////////////////////////////////////////////////////////////////////
TStreamProxy = class(TStream)
protected
FAfterStreamChange: TNotifyEvent;
FBeforeStreamChange: TNotifyEvent;
FStream: TStream;
FOwnsStream: Boolean;
procedure SetStream(Value: TStream);
protected
procedure DoAfterStreamChange; virtual;
procedure DoBeforeStreamChange; virtual;
procedure SetSize(const NewSize: Int64); override;
public
constructor Create(AStream: TStream; AOwnsStream: Boolean = False);
destructor Destroy; override;
function Read(var Buffer; Count: Integer): Longint; override;
function Write(const Buffer; Count: Integer): Longint; override;
function Seek(Offset: Longint; Origin: Word): Longint; override;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
property Stream: TStream read FStream write SetStream;
property OwnsStream: Boolean read FOwnsStream write FOwnsStream;
property AfterStreamChange: TNotifyEvent read FAfterStreamChange write FAfterStreamChange;
property BeforeStreamChange: TNotifyEvent read FBeforeStreamChange write FBeforeStreamChange;
end;
Теперь на базе этого TStreamProxy можем построить, например, буферизованный стрим или шифрующий/дешифрующий стрим и т.д. и т.п., причем он отснется стримом и его можно прозрачно передавать куда угодно, где стрим принимается.
← →
DVM © (2013-04-15 16:02) [8]
> clickmaker © (15.04.13 13:46) [6]
собственно вот c википедии из статьи про декоратор:TDecorator = class(TInterfaceComponent)
private
FComponent: TInterfaceComponent;
public
constructor Create(aComponent: TInterfaceComponent);
end;
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c