![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 26.10.2009
Сообщений: 170
|
![]()
день добрый.
не понимаю, в чем принципиальная разница между использованием данного паттерна и использовании обычной иерархии классов. к примеру, есть классы, реализующие алгоритмы архивации RARCompression, ZIPCompression, ARJCompression, являющиеся наследниками класса Compression, и определяют метод compress. В соответствии с парадигмой паттерна, мы должны создать некий вспомогательный класс Compressor, который будет держать ссылку на абстрактный Compression и делегировать вызов compress. утверждается, что Strategy предоставляет возможность замены одного алгоритма другим в процессе выполнения программы. хотелось бы увидеть на примере, как это можно делать и будет ли это проще, чем в том случае, когда мы работаем на с классом Compressor, а Compression. утверждается также, что Strategy позволяет скрыть детали реализации алгоритмов от клиента. но если Compression - интерфейс, чего еще надо скрывать? |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
На вики есть примеры. Далее, данный паттерн имеет смысл использовать только для сложных каких-то систем. В большинстве случаев более наглядно обычное условие или селектор. Да даже если требуется переделка, то переписать имена классов (в случае полиморфизма) намного проще чем городить такой огород.
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 13.04.2014 в 23:13. |
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 28.06.2010
Сообщений: 189
|
![]()
почитайте еще про Dependency Injection и Inversion of Control.
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
![]()
Пишем свою стратегию выделения памяти для vector, а потом так:
Код:
Код:
Правда я не вижу смысла использовать стратегии если вы пишите что-то конкретное, а не гибкую библиотеку с кучей настроек типа своего GUI или framework'а |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#6 | ||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
![]() Цитата:
Цитата:
Код:
Хотя признаю, на втором курсе Александреску не осилил =(, только к концу третьего. Последний раз редактировалось Kostia; 14.04.2014 в 22:56. |
||
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
В общем, на мой взгляд, идея спорная и, ИМХО, нет ни одного преимущества при использовании обычных там IF'ов или Case.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Давайте сделаем мысленный эксперимент:
Две группы программистов параллельно развивают продукт: "полигон для животных". Заказчик захотел, что бы на полигоне жили волки и овцы. Волки - хищники, и питаются овцами. Овцы - травоядные, и убегают от хищников. ----------------- Ребята из первой группы выделили общее у животных и завели интерфейс IAnimal От которого унаследовали волка и овцу, которые реализуют собственно само поведение животных. Итого: 1 интерфейс, и два класса. ----------------- Ребята из второй группы решили, что технически волк и овца - вообще ничем не отличаются, кроме параметров. Повесили картинку волка - получился волк. Повесили картинку овцы - получилась овца. А вот поведение же животных они сделали в виде параметра животного - стратегия. Назначая ту или иную стратегию животному, можно легко менять его поведение. Итого: один класс животного, 1 интерфейс стратегии, 2 стратегии для волка и овцы соответственно. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паттерн Registry | SoftKoc | PHP | 4 | 27.07.2013 01:07 |
Паттерн | Начинающий програм | Помощь студентам | 0 | 20.05.2013 19:41 |
Паттерн наблюдадель. c# | Skull_psyhothik | Помощь студентам | 0 | 22.04.2013 20:38 |
паттерн singleton | zhenya.ya | Общие вопросы C/C++ | 1 | 26.11.2010 03:11 |
Паттерн MVP | Vistar | Общие вопросы .NET | 0 | 11.09.2010 18:45 |