|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.04.2014, 12:58 | #1 |
Форумчанин
Регистрация: 26.10.2009
Сообщений: 170
|
паттерн стратегия
день добрый.
не понимаю, в чем принципиальная разница между использованием данного паттерна и использовании обычной иерархии классов. к примеру, есть классы, реализующие алгоритмы архивации RARCompression, ZIPCompression, ARJCompression, являющиеся наследниками класса Compression, и определяют метод compress. В соответствии с парадигмой паттерна, мы должны создать некий вспомогательный класс Compressor, который будет держать ссылку на абстрактный Compression и делегировать вызов compress. утверждается, что Strategy предоставляет возможность замены одного алгоритма другим в процессе выполнения программы. хотелось бы увидеть на примере, как это можно делать и будет ли это проще, чем в том случае, когда мы работаем на с классом Compressor, а Compression. утверждается также, что Strategy позволяет скрыть детали реализации алгоритмов от клиента. но если Compression - интерфейс, чего еще надо скрывать? |
13.04.2014, 23:07 | #2 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
На вики есть примеры. Далее, данный паттерн имеет смысл использовать только для сложных каких-то систем. В большинстве случаев более наглядно обычное условие или селектор. Да даже если требуется переделка, то переписать имена классов (в случае полиморфизма) намного проще чем городить такой огород.
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 13.04.2014 в 23:13. |
|
14.04.2014, 14:00 | #3 |
Форумчанин
Регистрация: 28.06.2010
Сообщений: 189
|
почитайте еще про Dependency Injection и Inversion of Control.
|
14.04.2014, 18:41 | #4 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Пишем свою стратегию выделения памяти для vector, а потом так:
Код:
Код:
Правда я не вижу смысла использовать стратегии если вы пишите что-то конкретное, а не гибкую библиотеку с кучей настроек типа своего GUI или framework'а |
14.04.2014, 20:30 | #5 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
14.04.2014, 22:52 | #6 | ||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
Цитата:
Код:
Хотя признаю, на втором курсе Александреску не осилил =(, только к концу третьего. Последний раз редактировалось Kostia; 14.04.2014 в 22:56. |
||
15.04.2014, 07:16 | #7 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
В общем, на мой взгляд, идея спорная и, ИМХО, нет ни одного преимущества при использовании обычных там IF'ов или Case.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
15.04.2014, 21:00 | #8 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
|
|
16.04.2014, 06:12 | #9 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
18.04.2014, 18:10 | #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 |