Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Различия между шаблоном "Мост" и "Стратегия" (http://www.flasher.ru/forum/showthread.php?t=176310)

angorow 07.03.2012 00:20

Различия между шаблоном "Мост" и "Стратегия"
 
Здравствуйте!

В данной беседе хочется найти объективные различия этих двух шаблонов, кроме различий которые содержатся в их описании.

Стратегия— поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Стратегия позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.

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).
В данном случае логично применить ход, который заключается в описании шаблонов “Стратегия” или “Мост”?

Очень интересны ваши мнения по этому поводу!
Заранее благодарен!

СлаваRa 07.03.2012 00:28

Надеюсь это вам поможет
Цитата:

но на сцене появляются (D, E, F).
С какой целью?
Цитата:

Здесь начинается самое интересное! Мы видим, что функционал (D, E, F) может быть добавлен к любому из (B, C).
А можете развернуто объяснить эту строчку?
Цитата:

Наследование в данном случае будет не эффективно(речь конечно же идет только о AS3).
AS3 не поддерживает множественное наследование

angorow 07.03.2012 00:35

Здравствуйте!
Читайте пост внимательно! Все в посте!
Цель здесь абсолютно не имеет значения, придумайте любую цель и подставьте вместо буквы...
Кто говорит про множественное наследование? Где я сказал, что оно есть?
По этой причине речь и идет о паттернах "Мост" и "Стратегия"

Yahen 07.03.2012 01:23

И все же. Чем Вас не устраивает обычная инкапсуляция? Без кодовой обертки конструкторов?
На случай если B и С в качестве общего предка имеют что-то недалеко отошедшее от простого object, в AS3 есть интерфейсы, облегчающие доступ к методам не имеющим общего предка.
Тем более, что и стратегия и мост, как, впрочем и фабрика не столь очевидны в реализации и использовании, если Ваши ABC растут от DisplayObject.

angorow 07.03.2012 01:34

Еще раз добрый вечер!
Да меня все устраивает и я сам этим пользуюсь, но....о... На днях наткнулся на "битву титанов", которая собственно была приурочена статье одного из этих “титанов” на тему “Bridge”, в статье был пример из-за, которого и развилась эта баталия. А разногласия заключались в том, что одни считали это “Стратегия”, другие считали, что это “Мост”. И все это длилось в течении 100 постов. Итог: внятно ни кто не смог объяснить разницу между двумя этими шаблонами, кроме как дать скупую цитату из описания этих шаблонов.
А вопрос еще раз для вас в сабже))).

Добавлено через 5 минут
Цитата:

Сообщение от Yahen (Сообщение 1067601)
есть интерфейсы, облегчающие доступ к методам не имеющим общего предка.

И Interface здесь ну......! Вы предлагает одну и ту же реализацию переписывать по n-раз? Противоречит предназначению Interface. Может я вас не правильно понял.

gloomyBrain 07.03.2012 01:50

Цитата:

Противоречит предназначению Interface. Может я вас не правильно понял.
Может Вы неправильно поняли предназначение интерфейсов? =) За интерфейсом может быть любая реализация, хоть через наследование, хоть через композицию. Как бы то ни было, не писать код по n раз вполне реально.

angorow 07.03.2012 01:55

Здравствуйте!
Вы все на 100% поняли наоборот! Я и говорю о том, что Interface приводит различные реализации к одной спецификации. Согласны? Если да читайте все с начала, в первом моем посте есть две диаграмки с зелеными кубиками.

gloomyBrain 07.03.2012 01:58

Здравствуйте! Перечитайте свой пост (№5). В нем говорится, что написание кода n раз противоречит смыслу интерфейсов. Так вот - не противоречит. Вообще все равно, что там за код скрыт за интерфейсом. Согласны? Если нет - читайте все сначала.

angorow 07.03.2012 02:03

Еще раз первый пост! Я и говорю, что из слов

Сообщение от Yahen
есть интерфейсы, облегчающие доступ к методам не имеющим общего предка.

применительно к диаграммам в первом сообщении код реализации интерфейса будет один и тот же для каждого случая, что есть бред! Будьте пожалуйста внимательнее.

gloomyBrain 07.03.2012 02:07

Почему бред? Вы попрбуйте применить тут композицию - все встанет на свои места. Да, код будет один и тот же. Более того - он и написан будет один раз, в нужных классах-"запчастях". Это даст Вам возможность собирать как из кубиков лего любую конкретную реализацию интерфейса.
И при чем тут мое внимание?


Часовой пояс GMT +4, время: 20:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.