Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1365971403
Юрий
2013-04-15 00:30
2013.09.22
С днем рождения ! 15 апреля 2013 понедельник


15-1364761592
TUser
2013-04-01 00:26
2013.09.22
Рисуем лошадь


15-1365885002
Юрий
2013-04-14 00:30
2013.09.22
С днем рождения ! 14 апреля 2013 воскресенье


2-1357236062
Юрий29
2013-01-03 22:01
2013.09.22
Убрать звук при использовании Alt


15-1365684591
Demo
2013-04-11 16:49
2013.09.22
О веб разработке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский