![]() |
Различия между шаблоном "Мост" и "Стратегия"
Здравствуйте!
В данной беседе хочется найти объективные различия этих двух шаблонов, кроме различий которые содержатся в их описании. Стратегия— поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Стратегия позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют. http://upload.wikimedia.org/wikipedi...gy_pattern.PNG Шаблон "стратегия": http://ru.wikipedia.org/wiki/%D0%A1%...D%D0%B8%D1%8F) Мост — шаблон проектирования, используемый в проектировании программного обеспечения чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо». Шаблон bridge (от англ. — мост) использует инкапсуляцию,агрегирование и может использовать наследование для того, чтобы разделить ответственность между классами. http://upload.wikimedia.org/wikipedi.../Bridgeuml.gif Шаблон "мост":http://ru.wikipedia.org/wiki/%D0%9C%...BD.D0.B8.D0.B5 Раунд 1 собственно. Я думаю нужно начать с решения(рационального решения) конкретной задачи. Допустим есть: http://imglink.ru/thumbnails/06-03-1...d67af849e5.jpg C (A, B, C) все предельно просто (B, C) расширяют A, полиморфизм хорошо здесь выполняет свои задачи, но на сцене появляются (D, E, F). http://imglink.ru/thumbnails/06-03-1...d6a7897d1e.jpg Здесь начинается самое интересное! Мы видим, что функционал (D, E, F) может быть добавлен к любому из (B, C). Как быть? Наследование в данном случае будет не эффективно(речь конечно же идет только о AS3). В данном случае логично применить ход, который заключается в описании шаблонов “Стратегия” или “Мост”? Очень интересны ваши мнения по этому поводу! Заранее благодарен! |
Надеюсь это вам поможет
Цитата:
Цитата:
Цитата:
|
Здравствуйте!
Читайте пост внимательно! Все в посте! Цель здесь абсолютно не имеет значения, придумайте любую цель и подставьте вместо буквы... Кто говорит про множественное наследование? Где я сказал, что оно есть? По этой причине речь и идет о паттернах "Мост" и "Стратегия" |
И все же. Чем Вас не устраивает обычная инкапсуляция? Без кодовой обертки конструкторов?
На случай если B и С в качестве общего предка имеют что-то недалеко отошедшее от простого object, в AS3 есть интерфейсы, облегчающие доступ к методам не имеющим общего предка. Тем более, что и стратегия и мост, как, впрочем и фабрика не столь очевидны в реализации и использовании, если Ваши ABC растут от DisplayObject. |
Еще раз добрый вечер!
Да меня все устраивает и я сам этим пользуюсь, но....о... На днях наткнулся на "битву титанов", которая собственно была приурочена статье одного из этих “титанов” на тему “Bridge”, в статье был пример из-за, которого и развилась эта баталия. А разногласия заключались в том, что одни считали это “Стратегия”, другие считали, что это “Мост”. И все это длилось в течении 100 постов. Итог: внятно ни кто не смог объяснить разницу между двумя этими шаблонами, кроме как дать скупую цитату из описания этих шаблонов. А вопрос еще раз для вас в сабже))). Добавлено через 5 минут Цитата:
|
Цитата:
|
Здравствуйте!
Вы все на 100% поняли наоборот! Я и говорю о том, что Interface приводит различные реализации к одной спецификации. Согласны? Если да читайте все с начала, в первом моем посте есть две диаграмки с зелеными кубиками. |
Здравствуйте! Перечитайте свой пост (№5). В нем говорится, что написание кода n раз противоречит смыслу интерфейсов. Так вот - не противоречит. Вообще все равно, что там за код скрыт за интерфейсом. Согласны? Если нет - читайте все сначала.
|
Еще раз первый пост! Я и говорю, что из слов
Сообщение от Yahen есть интерфейсы, облегчающие доступ к методам не имеющим общего предка. применительно к диаграммам в первом сообщении код реализации интерфейса будет один и тот же для каждого случая, что есть бред! Будьте пожалуйста внимательнее. |
Почему бред? Вы попрбуйте применить тут композицию - все встанет на свои места. Да, код будет один и тот же. Более того - он и написан будет один раз, в нужных классах-"запчастях". Это даст Вам возможность собирать как из кубиков лего любую конкретную реализацию интерфейса.
И при чем тут мое внимание? |
Специально для Вас!
Код AS1/AS2:
Код AS1/AS2:
|
Декоратор?
:) |
Цитата:
А почему не "Стратегия" или "Мост"?:) Добавлено через 1 минуту И декоратор тут не подойдет, у них должен быть общий интерфес тогда.... |
У стратегий и мостов тоже обычно общий интерфейс. Определитесь точнее, что вам надо.
А вообще эти 3 понятия могут пересекаться по разному. Например одна из стратегий может быть просто комбинированной обёрткой-декоратором над чем нибудь ещё. Или мостом. Т.е. один и тот же класс можно обозвать по разному. Зависит от контекста. |
Это смотря откуда смотреть))) А вопрос в сабже! Различия между шаблоном "Мост" и "Стратегия"
Добавлено через 8 минут Не совсем согласен, но до ладно давайте от другого пойдем... пост №11 ваша реализация и название шаблона, который вы будете использовать. Если можно конечно. |
В и С по отношению к IA - стратегии
по отношению к IF - тоже стратегии, но т.к. сами не реалтзуют этот функционал а используют какой то класс F, то по отношению к F они мосты и декораторы. Как то так. Спать пора) |
можно глянуть перед сном
http://www.youtube.com/watch?v=zI4icUNXgWk |
Цитата:
На самом деле я в первом сообщении написал цель по, которой я развил данную тему. Понятно, что решений много, а названий можно придумать еще больше... Интересен факт, который я описал в пост №5. |
Хорошо объясняет, как я и сказал. стратегия, мост и декоратор(делегат) все вместе)
|
Цитата:
Очень приятно! Да мы о том же...:), спасибо за ссылку! Но она, как бы она очередной дубль информации, которую мы собственно и обсуждаем. Нового к сожалению=0. Хочется получить ответ на сабж. Если его в принципе нельзя сформулировать встают другие вопросы... Добавлено через 4 минуты Обсуждение уходит все время не в другую плоскость. Разговор идет не о том, что такое "Мост" и "Стратегия", а о том чем они отличаются. Вот я смотрю на UML диаграммы из пост №1 и верю своим глазам, по сути это = |
это как разница между жидкостью и молоком.
Стратегия разрешает использовать объекты по их общему интерфейсу. А мост это паттерн позволящий вместо наследования использовать делегирование. Сам мост в этом случае явлеятся декораторм прикрывющим старатегии) |
Идем от другого один поведенческий другой структурный. Правильно?
|
Да! Можно и так сказать.
|
Так оно так и есть по классическому определению.) Реализация решения очевидна, но вот определение этой реализации...
Добавлено через 2 минуты Цитата:
|
Все же смысл Стратегии в предоставлении алгоритма, даже не метода в широком смысле (алгоритм ничего не знает о внутреннем устройстве клиента и может изменять только те данные, которые дали ему в обработку, в то время как "метод вообще" может оперировать членами класса-клиента/хозяина). А смысл Моста в предоставлении целой иерархии взаимосвязанных классов, "модуля". Скажем, на примере игры: если Вы взяли огнемет, то взяли также бак горючего, систему охлаждения и варежки. Взяли АК47 – взяли набор патронов такого-то калибра, штык-нож и оптический прицел. И огнемет, и АК47 – абстрактно Оружие. Но ситуация выбора/замены здесь это не Стратегия. Это Мост. "Оружие" – это не поведение, это структура. Стратегия – когда из АК47 Вы стреляете разрывными или трассирующими, и абстракция "выстрел" конкретно отображается разными способами. Мост предоставляет систему взаимосвязанных классов, а Стратегия - способ выполнения действия. Диаграммы похожи – ну а с чего им различаться, они показывают только абстрактную схему "выбор и замена". Схема отношений одна, фигуранты – разные.
|
Здравствуйте!
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
-------------------------------------------------------------------------------------------------------------- Спасибо! |
Может его сразу забанить? Злой он какой-то. Сплошные "не согласен". )
|
Имхо перенести во флейм :)
Насколько я понимаю никакого практического применения топик не имеет, автору всего лишь захотелось пофилософствовать. Или может действительно практическая задача не решится пока не станет ясна разница между паттернами? :) |
Ага, ожидал такой реакции. Что ж, тогда конкретней. Но не намного))
Рассмотрим последовательность. Персонаж выбирает "оружие", берет "оружие", "прицеливается", "стреляет". Мост: выбратьОружие(Огнемет), взятьОружие(), прицелиться(), стрелять(). Стратегия: выбратьОружие(Огнемет), взятьОружие(Огнемет), прицелиться(Огнемет), стрелять(Огнемет). Так понятней? Цитата:
Цитата:
|
Закройте тему пожалуйста! Все это лирика... Спасибо!
|
И не подумаем!
|
Полностью согласен с объяснением Wolsh.
|
|
Недавно попалось изложение интересной беседы по другому поводу, но там, в том числе было и про шаблоны, и в том числе про недостатки. Идея заключалась в том, что языки со статической типизацией и объектность плохо совместимы. Уже само по себе наличие такой проблемы (как создать множество наследников разных классов с похожим поведением) вызвано этими двумя свойствами языка. (Я говорю про видео, где человек прикручивает костыли к Явовской / Сишарповской объектной модели).
Не знаю... в данном контексте хорошего решения нет. На практике - нужно смотреть по обстоятельствам, чем проще будет пожертвовать, какие конкретные требования существуют. Иногда даже банальное копирование кода оказывается лучшим решением чем нагромождение абстрактных классов - если скопировать нужно всего пару строчек. Если это позволит программе оставаться модульной иногда лучше чем придумывать интерфейсы / абстрактные классы, которые все равно либо притянут кучу зависимостей, либо не дадут достаточной гарантии относительно взаимодействующих сторон. Что до вопроса в заголовке темы: ну, перед вами есть пример с тысячелетней историей того, как люди необоснованно и неукоснительно дословно соблюдали набор принципов, которы зачастую не то, что не имел ничего общего с действительностью, но даже вредил особо рьяным исполнителям. Скорее всего "мост" и "стратегия" взаимозаменимы / зависят от точки зрения того, кто их описывает. Что вики говорит по этому поводу: Цитата:
Цитата:
|
| Часовой пояс GMT +4, время: 21:39. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.