Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Adapter

Структурные шаблоны

Применяются как для разделения, так и для объединения элементов приложения. Способы воздействия структурных шаблонов на приложение могут быть самые разные. При проектировании, часто возникает потребность в соблюдении принципов слабой связанности и высокого зацепления (low coupling and high cohesion) между классами и группами классов. Практикой было выработано много шаблонов, которые позволяют оформлять и структурировать классы, удовлетворяющие указанным принципам. Напомним, что принцип слабой связанности между группой классов диктуется потребностью разделять функциональность на относительно независимые части, с той цельлю, чтобы этими частями можно было проще манипулировать, распараллеливать разработку, взаимозаменять их при необходимости и тестировать в изолированном режиме. Принцип высокого зацепления, напротив, склоняется к тому, чтобы сходные части функциональности находились в как можно более тесной зависимости и связи друг с другом, что бы наиболее полно использовать преимущества и внутреннюю структуры друг друга. Принцив высокого зацепления на практике выражается в тенденции объединять родственную функциональность в пределах класса, группы классов или модуля. Например, в одном классе, предсталяющем «Заказ», как правило содержаться и методы для вычисления его общей стоимости, его проверки и т.п. С т.з. принципа высокого зацепления, было бы ошибочно вынести эти операции за пределы класса, так как получившийся класс «Заказ» превратился бы в простой контейнер данных, а операции были бы представлены в статических методах другого класса, что привело бы к возврату к процедурному программированию, так как нарушает одну из основных идей ООП – инкапсуляцию. С другой стороны, если имеется некторая функциоанльность, которая взимодействует с другой функциональностью, и имеется вероятность (либо это удобно с точки зрения описания бизнес процессов) того что обе функциональности могут независимо изменяться – то сильная связь между ними – осножнила бы сопровождение и развитие системы в будущем. В данном случае прибегают к принципам разделения функциональности и абстрагирования её частей с помощью обобщённых интерфейсов.

 

Мы рассмотрим следующие структурные шаблоны:

  • Adapter.
  • Composite.
  • Façade.
  • Decorator.
  • Proxy.

 

 

Обеспечивает взаимодействие двух классов путём преобразования интерфейса одного из них таким образом, чтобы им мог пользоваться другой класс.

Предположим, что необходимо обеспечить прозрачную работу с разными модулями или классами, предоставляющими сходную функциональность, но имеющими разные интерфейсы (в примере AdapteeA и AdapteeB не имеют общих интерфейсов). Для этого, можно работать (класс Consumer) с разными версиями адаптеров, реализующих общих интерфейс, и как бы «оборачивающих» целевые классы в этот обобщённых интерфейс. Поэтому альтернативное название этого шаблона Wrapper. Обратная задача, где так же с успехом может применяться данный шаблон – необходимость подключить какую либо функциональность к уже существующей инфраструктуре. Для этого создаётся адаптер, который позволяет прозрачно, без внесения изменений ни в существующую инфраструктуру, ни в целевой модуль (или класс), подключить его. Адаптер может быть приметивным транслятором вызовов ил одного формата в другой (например вызывая методы с разными именами, или разным порядком параметров), либо совершать какие либо дополнительные действия, например, несколько вызовов к адаптеру может выражаться в одном вызове к целевому классу или модулю. Более того, адаптер может запросить дополнительные данные из стороннего источника, например из БД.

<== предыдущая лекция | следующая лекция ==>
Visitor | Composite
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.