Head First Гриффитс Д.Head First купитьHead First. Программирование для Android. 2-е издHead First. Паттерны проектирования. Обновленное юбилейное издание Фримен Э.Head First. Паттерны проектирования. Обновленное юбилейное издание купить
Head First
Head First Гриффитс Д.
Head First купить
Head First. Программирование для Android. 2-е изд
Head First. Паттерны проектирования. Обновленное юбилейное издание Фримен Э.
Head First. Паттерны проектирования. Обновленное юбилейное издание купить

Head First. Паттерны проектирования. Обновленное юбилейное издание, Фримен Э.

464 грн.

Купить в 1 клик

Описание

Head First. Паттерны проектирования. Обновленное юбилейное издание, Фримен Э. купить Украина книга

Издательство — Питер

Язык — русский

Обложка — Мягкая обложка

Год издания — 2018

Количество страниц — 656

ISBN — 978-5-496-03210-0

Бумага — белая, офсетная

О книге Head First. Паттерны проектирования. Обновленное юбилейное издание, Фримен Э.

Больше 12 лет прошло с момента выхода первого издания книги, но она продолжает оставаться актуальной. Основные идеи не изменились, но изменился язык Java, например, появились лямбда-выражения. Поэтому авторы приняли решение обновить легендарную книгу и выпустить юбилейное издание.В мире постоянно кто-то сталкивается с такими же проблемами программирования, которые возникают и у вас. Многие разработчики решают совершенно идентичные задачи и находят похожие решения. Если вы не хотите изобретать велосипед, используйте готовые шаблоны (паттерны) проектирования, работе с которыми посвящена эта книга.Паттерны появились, потому что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Особенностью данного издания является уникальный способ подачи материала, выделяющий серию «Head First» издательства O’Reilly в ряду множества скучных книг, посвященных программированию. Книга будет интересна широкому кругу веб-разработчиков, от начинающих до профессионалов, желающих освоить работу с паттернами проектирования.

Head First. Паттерны проектирования. Обновленное юбилейное издание, Фримен Э. оглавление

10 ВведениеНастройте свой мозг на дизайн паттернов. Вот что вам понадобится, когда вы пытаетесь что-то выучить, в то время как ваш мозг не хочет воспринимать информацию. Ваш мозг считает: «Лучше уж я подумаю о более важных вещах, например об опасных диких животных или почему нельзя голышом прокатиться на сноуборде». Как же заставить свой мозг думать, что ваша жизнь зависит от овладения дизайном паттернов?Для кого написана эта книга? 26Мы знаем, о чем вы думаете 27Метапознание 29Заставь свой мозг повиноваться 31Технические рецензенты 34Благодарности 35 (сводка)

Введение 251

Добро пожаловать в мир паттернов: знакомство с паттернами 372 Объекты в курсе событий: паттерн Наблюдатель 713 Украшение объектов: паттерн Декоратор 1114 Домашняя ОО-выпечка: паттерн Фабрика 1415 Уникальные объекты: паттерн Одиночка 1996 Инкапсуляция вызова: паттерн Команда 2197 Умение приспосабливаться: паттерны Адаптер и Фасад 2698 Инкапсуляция алгоритмов: паттерн Шаблонный Метод 3079 Управляемые коллекции: паттерны Итератор и Компоновщик 34510 Состояние дел: паттерн Состояние 41311 Управление доступом к объектам: паттерн Заместитель 45712 Паттерны паттернов: составные паттерны 52313 Паттерны в реальном мире: паттерны для лучшей жизни 59914 Приложение: другие паттерны 633

(настоящее)111Добро пожаловать в мир паттерновНаверняка вашу задачу кто-то уже решал. В этой главе вы узнаете, почему (и как) следует использовать опыт других разработчиков, которые уже стал-кивались с аналогичной задачей и успешно решили ее. Заодно мы поговорим об использовании и преимуществах паттернов проектирования, познакомим-ся с ключевыми принципами ООП и разберем пример одного из паттернов. Лучший способ использовать паттерны — запомнить их, а затем научиться распознавать те места ваших архитектур и существующих приложений, где их уместно применить. Таким образом, вместо программного кода вы повторно используете чужой опыт.Знакомство с паттернамиЗнание таких концеп-ций, как абстракция, на-следование и полиморфизм, еще не делает из вас хорошего ОО-проектировщика. Истинный гуру проектирования стремится создавать гибкие архитектуры, способные адаптироваться к изменениям.Приложение SimUDuck 38Джо думает о наследовании

Как насчет интерфейса? 42Единственная константа в программировании 44Отделяем переменное от постоянного 46Реализация поведения уток 49Тестирование кода Duck 54Динамическое изменение поведения 56Инкапсуляция поведения: общая картина 58Отношения СОДЕРЖИТ бывают удобнее

отношений ЯВЛЯЕТСЯ 59Паттерн Стратегия 60Сила единой номенклатуры 64Как пользоваться паттернами? 65Новые инструменты 68Ответы к упражнениям 6912 Обзор приложения Weather Monitoring

73Знакомство с паттерном Наблюдатель 78Издатели + Подписчики = Паттерн Наблюдатель 79Пятиминутная драма: субъект для наблюдения 82Определение паттерна Наблюдатель 85Сила слабых связей 87Проектирование Weather Station 89Реализация Weather Station 90Встроенная реализация в языке Java 97Темная сторона java.util.Observable 104Новые инструменты 108Ответы к упражнениям 1102Объекты в курсе событийНе упустите, когда происходит что-то интересное! Наш следующий пат-терн оповещает объекты о наступлении неких событий, которые могут пред-ставлять для них интерес, — причем объекты даже могут решать во время выполнения, желают ли они и дальше получать информацию. Паттерн На-блюдатель чрезвычайно полезен и принадлежит к числу наиболее часто ис-пользуемых паттернов JDK. Также в этой главе будут рассмотрены связи типа «один-ко-многим» и слабые связи. С паттерном Наблюдатель вы станете ду-шой Общества Паттернов.Паттерн НаблюдательСубъект8intОбъект DogОбъект Mouse

Объект Cat

Объект DuckНаблюдатели8888ОТНОШЕНИЕ «ОДИН-КО-МНОГИМ»Автоматическое обновление/оповещениеОбъект с состояниемЗависимые объекты133Украшение объектовЭту главу можно назвать «Взгляд на архитектуру для любителей на-следования». Мы проанализируем типичные злоупотребления из области на-следования, и вы научитесь декорировать свои классы во время выполнения с использованием разновидности композиции. Зачем? Затем, что этот прием позволяет вам наделить свои (или чужие) объекты новыми возможностями без модификации кода классов.Паттерн ДекораторПрежде я полагал, что настоящие мужчины используют только субклассирование. Но потом я осознал возможности динамического расширения на стадии выполнения. Посмотрите, каким я стал!Добро пожаловать в Starbuzz 112Принцип открытости/закрытости 118Знакомство с паттерном Декоратор 120Построение заказанного напитка 121Определение паттерна Декоратор 123Декораторы и напитки 124Пишем код для Starbuzz 127Программируем классы напитков 128Программирование дополнений 129Декораторы в реальном мире: ввод/вывод в языке Java 132Написание собственного декоратора ввода/вывода 134Новые инструменты 137Ответы к упражнениям 13814 4Домашняя ОО-выпечкаПриготовьтесь заняться выпечкой объектов в слабосвязанных ОО-архитектурах. Создание объектов отнюдь не сводится к простому вызову опе-ратора new. Оказывается, создание экземпляров не всегда должно осущест-вляться открыто; оно часто создает проблемы сильного связывания. А ведь вы этого не хотите, верно? Паттерн Фабрика спасет вас от неприятных за-висимостей.Паттерн ФабрикаВидим new — подразумеваем конкретный 142Пицца Объектвиля 144Инкапсуляция создания объектов 146Построение Простой Фабрики для пиццы 147Определение Простой Фабрики 149Инфраструктура для пиццерии 152Принятие решений в субклассах 153Субклассы PizzaStore 155Объявление Фабричного Метода 157Пора познакомиться с паттерном Фабричный Метод 163Параллельные иерархии классов 164Определение паттерна Фабричный Метод 166PizzaStore с сильными зависимостями 169Зависимости между объектами 170Принцип инверсии зависимостей 171Вернемся в пиццерию

Семейства ингредиентов

Построение фабрик ингредиентов 178Рассмотрим Абстрактную Фабрику 185За сценой 186Определение паттерна Абстрактная Фабрика 188Сравнение паттернов Фабричный Метод и Абстрактная Фабрика 192Новые инструменты 194Ответы к упражнениям 195CreateProductA()CreateProductB()<>AbstractFactoryКлиентProductB1<>AbstractProductBProductA1ProductB2<>AbstractProductAProductA2CreateProductA()CreateProductB()ConcreteFactory2CreateProductA()CreateProductB()ConcreteFactory1Код клиента пишется для абстрактной фабри-ки, а затем во время выполнения связывается с реальной фабрикой.Конкретные фабрики реализуют разные семейства продуктов. Чтобы создать продукт, клиент использует одну из фабрик, т. е. ему никогда не приходится явно создавать экземпляры продуктов.AbstractFactory определяет ин-терфейс, который реализуется всеми конкретными фабриками. Интерфейс состоит из методов создания продуктов.Семейство продуктов. Каждая конкретная фабрика может производить полный набор продуктов.155Уникальные объектыПаттерн Одиночка направлен на создание уникальных объектов, суще-ствующих только в одном экземпляре. Из всех паттернов Одиночка имеет самую простую диаграмму классов; собственно, вся диаграмма состоит из од-ного-единственного класса! Однако не стоит расслабляться; несмотря на всю его простоту с точки зрения архитектуры классов, в его реализации кроется немало ловушек. Так что пристегните ремни!Паттерн ОдиночкаЕдинственный и неповторимый 200Вопросы и ответы 201Классическая реализация паттерна Одиночка 203Признания Одиночки 204Шоколадная фабрика 205Определение паттерна Одиночка 207Кажется, у нас проблемы

Представьте, что вы — JVM 209Решение проблемы многопоточного доступа 210Одиночка. Вопросы и ответы

214Новые инструменты 216Ответы к упражнениям 21716 6Инкапсуляция вызоваВ этой главе мы выходим на новый уровень инкапсуляции — на этот раз будут инкапсулироваться вызовы методов

Да, все верно — вызывающему объекту не нужно беспокоиться о том, как будут выполняться его запросы. Он просто использует инкапсулированный метод для решения своей задачи. Ин-капсуляция позволяет решать и такие нетривиальные задачи, как регистрация или отмена вызовов. Паттерн КомандаАвтоматизируй дом или проиграешь 220Пульт домашней автоматизации 221Классы управления устройствами 222Краткое введение в паттерн Команда

225Рассмотрим взаимодействия чуть более подробно

Роли и обязанности в кафе Объектвиля 227От кафе к паттерну Команда 229Наш первый объект команды 231Определение паттерна Команда 234Связывание команд с ячейками 237Реализация пульта 238Проверяем пульт в деле 240Пора писать документацию

Реализация отмены с состоянием 248На каждом пульте должен быть Режим Вечеринки! 252Использование макрокоманд 253Паттерн Команда означает множество классов команд 256Упрощение кода RemoteControl с лямбда-выражениями 257Тест-драйв команд с использованием лямбда-выражений 260Расширенные возможности паттерна Команда: очереди запросов 263Расширенные возможности паттерна Команда: регистрация запросов 264Новые инструменты 265Ответы к упражнениям 266177Умение приспосабливатьсяВ этой главе мы займемся всякими невозможными трюками — будем затыкать круглые дырки квадратными пробками. Невозможно, скажете вы? Только не с паттернами проектирования. Помните паттерн Декоратор? Мы «упаковывали» объекты, чтобы расширить их возможности. А в этой главе мы займемся упаковкой объектов с другой целью: чтобы имитировать интерфейс, которым они в действительности не обладают. Для чего? Чтобы адаптировать архитектуру, рассчитанную на один интерфейс, для класса, реализующего дру-гой интерфейс. Но и это еще не все; попутно будет описан другой паттерн, в котором объекты упаковываются для упрощения их интерфейса.Паттерны Адаптер и ФасадАдаптеры вокруг нас 270Объектно-ориентированные адаптеры 271Как работает паттерн Адаптер 275Определение паттерна Адаптер 277Адаптеры объектов и классов 278Беседа у камина: Адаптер объектов и Адаптер классов

281Практическое применение адаптеров 282Адаптация перечисления к итератору 283Беседа у камина: паттерн Декоратор и паттерн Адаптер 286Домашний кинотеатр 289Свет, камера, фасад! 292Построение фасада для домашнего кинотеатра 295Определение паттерна Фасад 298Принцип минимальной информированности 299Новые инструменты 304Ответы к упражнениям 305Адаптируемый объектКлиентАдаптерrequest()translatedRequest()Реализация клиента использует целевой интерфейс.Адаптер реализует целевой интерфейс и хранит ссылку на экземпляр адаптируемого объекта.целевой интерфейсинтерфейс адаптируемого объектаTurkeyAdapter реализует целевой интерфейс Duck.Адаптируется интерфейс Turkey.18 8Инкапсуляция алгоритмовМы уже «набили руку» на инкапсуляции; мы инкапсулировали создание объектов, вызовы методов, сложные интерфейсы, уток, пиццу

Что даль-ше? Следующим шагом будет инкапсуляция алгоритмических блоков, чтобы субклассы могли в любой момент связаться с нужным алгоритмом обработки. В этой главе даже будет описан принцип проектирования, вдохновленный Гол-ливудской практикой.Паттерн Шаблонный МетодКофе и чай (на языке Java) 309Абстрактный кофе и чай 312Продолжаем переработку

Абстрагирование prepareRecipe() 314Что мы сделали? 317Паттерн Шаблонный Метод 318Готовим чай

Что дает Шаблонный Метод? 320Определение паттерна Шаблонный Метод 321Код под увеличительным стеклом 322Перехватчики в паттерне Шаблонный Метод 324Использование перехватчиков 325Проверяем, как работает код 326Голливудский принцип 328Голливудский принцип и Шаблонный Метод 329Шаблонные методы на практике 331Сортировка на базе Шаблонного Метода 332Сортируем уток

Сравнение объектов Duck 334Как сортируются объекты Duck 336Шаблонный метод в JFrames 338Аплеты 339Беседа у камина: Шаблонный Метод и Стратегия 340Новые инструменты 342Ответы к упражнениям 343×òî ìû ñäåëàëè?1Âñêèïÿòèòü âîäó234Çàâàðèòü ÷àé â ãîðÿ÷åé âîäåÏåðåëèòü ÷àé â ÷àøêóÄîáàâèòü ëèìîí1Âñêèïÿòèòü âîäó234Çàâàðèòü êîôå â ãîðÿ÷åé âîäåÏåðåëèòü êîôå â ÷àøêóÄîáàâèòü ñàõàð è ìîëîêî24Çàâàðèòü ÷àé â ãîðÿ÷åé âîäåÄîáàâèòü ëèìîíСубкласс TeaСубкласс Coffee24Çàâàðèòü êîôå â ãîðÿ÷åé âîäåÄîáàâèòü ñàõàð è ìîëîêî1Âñêèïÿòèòü âîäó234ÇàâàðèòüÏåðåëèòü â ÷àøêóÄîáàâèòü CaffeineBeverageTeaCoffeeCaffeineBeverage знает последовательность действий в рецепте;

шаги 1 и 3 он выполняет самостоятельно, но при выполнении шагов 2 и 4 зависит от классов Tea и Coffee.Мы осознали, что два рецепта фактически совпадают, хотя некоторые шаги требуют разных реализаций. Соответственно мы обобщили рецепт и вынесли его в базовый класс.обобщениеВыполнение некоторых ша-гов зависит от субклассаобобщениеВыполнение некоторых шагов зави-сит от суб-класса199Управляемые коллекцииСуществует много способов создания коллекций. Объекты можно разме-стить в контейнере Array, Stack, List, Hashtable — выбирайте сами. Каждый способ обладает своими достоинствами и недостатками. Но в какой-то момент клиенту потребуется перебрать все эти объекты, и, когда это произойдет, со-бираетесь ли вы раскрывать реализацию коллекции? Надеемся, нет! Это было бы крайне непрофессионально. В этой главе вы узнаете, как предоставить клиенту механизм перебора объектов без раскрытия информации о способе их хранения. Также в ней будут описаны способы создания суперколлекций. А если этого недостаточно, вы узнаете кое-что новое относительно обязанно-стей объектов.Паттерны Итератор и КомпоновщикБистро объединяется с блинной! 346Сравниваем две реализации 348Как инкапсулировать перебор элементов? 354Паттерн Итератор 356Добавление итератора в DinerMenu 357Рассмотрим архитектуру 362Интеграция с java.util.Iterator 364Что нам это дает? 366Определение паттерна Итератор 367Принцип одной обязанности 370Итераторы и коллекции 379А когда мы уже торжествовали победу

Определение паттерна Компоновщик 386Проектирование меню с использованием паттерна Компоновщик 389Реализация комбинационного меню 392Возвращение к итераторам 398Пустой итератор 402Магия итераторов и композиций 404Новые инструменты 409Ответы к упражнениям 410PancakeHouseMenu

DinerMenu

CafeMenu123

MenuItem

MenuItem

MenuItem

MenuItem1234Ìåíþ áëèííîé

MenuItem

MenuItem

MenuItem

MenuItemÌåíþ êàôå

key

key

key

key

MenuItem

MenuItem

MenuItem

MenuItem1234Ìåíþ áèñòðîÂñå ìåíþ

MenuItem

MenuItem

MenuItem

MenuItem1234Äåñåðòíîå ìåíþКоллекция ArrayList, содержащая все меню.ArrayArrayListHashtable20 10Состояние делМалоизвестный факт: паттерны Стратегия и Состояние — близнецы, разлученные при рождении. Как известно, паттерн Стратегия организовал успешный бизнес в области взаимозаменяемых алгоритмов. Паттерн Состоя-ние выбрал, пожалуй, более благородный путь: он помогает объектам управ-лять своим поведением посредством изменения внутреннего состояния.Паттерн СостояниеРабота с диаграммой состояния 414Краткий курс конечных автоматов 416Программирование 418Кто бы сомневался

запрос на изменение! 422Печальное СОСТОЯНИЕ дел

Определение интерфейса State и классов 427Реализация классов состояний 429Переработка класса Gumball Machine 430Определение паттерна Состояние 438Состояние vs Стратегия 439Проверка разумности 445Чуть не забыли! 448Новые инструменты 451Ответы к упражнениям 452Mighty Gumball, Inc.)Ʈǀƶ+Ʈ ƹ ƴƳưƮƺƳ+,++Ʒ ƸƳƵƶ+++Ʒ +Ƴ Ư,ưƮƳƺ +++ƻ+ƻƹƺ+ƷКак нам кажется, контроллер автомата должен работать примерно так. Надеемся, вы реализуете эту схему на Java! Возможно, в будущем в нее будет добавлено новое поведение; постарайтесь сделать архитектуру гибкой и простой в сопровождении!

Инженеры Mighty GumballНетшариковЕстьмонеткаНетмонеткиШарикпроданброситьмонеткувернуть монеткудернутьза рычагвыдать шарикшарики = 0шарики > 02111Управление доступом к объектамКогда-нибудь разыгрывали сценку «хороший полицейский, плохой по-лицейский»? Вы — «хороший полицейский», вы общаетесь со всеми любезно и по-дружески, но не хотите, чтобы все обращались к вам за каждым пустяком. Поэтому вы обзаводитесь «плохим полицейским», который управляет досту-пом к вам. Именно этим и занимаются заместители: они управляют доступом. Как вы вскоре увидите, способы взаимодействия заместителей с обслужива-емыми объектами. Иногда заместители пересылают по Интернету целые вы-зовы методов, а иногда просто терпеливо стоят на месте, изображая временно отсутствующие объекты. Паттерн ЗаместительМонитор и автомат с жевательной резинкой 459Роль «удаленного заместителя» 462Введение в RMI 464Удаленные вызовы методов 465Удаленный заместитель. За сценой 485Определение паттерна Заместитель 487Знакомьтесь: Виртуальный Заместитель 489Проектирование виртуального заместителя 491Виртуальный заместитель. За сценой 497Создание защитного заместителя средствами Java API 501Пятиминутная драма: защита клиентов 505Динамический заместитель 506Разновидности заместителей 514Новые инструменты 516Ответы к упражнениям 517<>Subjectrequest()RealSubjectrequest()Proxyrequest()<>InvocationHandlerinvoke()InvocationHandlerТеперь заместитель состоит из двух классов.Заместитель генерируется на уровне Java и реализует весь интерфейс Subject.Вы предоставляете класс InvocationHandler, которому передаются все вызовы методов Proxy. InvocationHandler управляет доступом к методам RealSubject.invoke()Не подойдетПодойдет22 12Паттерны паттерновКто бы мог предположить, что паттерны порой работают рука об руку? Вы уже были свидетелями ожесточенных перепалок в «Беседах у камина» (причем вы не видели «Смертельные поединки» паттернов — редактор за-ставил нас исключить их из книги!). И после этого оказывается, что мирное сосуществование все же возможно. Хотите верьте, хотите нет, но некоторые из самых мощных ОО-архитектур строятся на основе комбинаций нескольких паттернов.Составные паттерныСовместная работа паттернов 524И снова утки 525Добавление Адаптера 528Добавление Декоратора 530Добавление Фабрики 532Добавление Компоновщика и Итератора 537Добавление Наблюдателя 540И все вместе 547Диаграмма классов с высоты утиного полета 548Паттерны проектирования — ключ к MVC 550MVC с точки зрения паттернов 554Использование MVC для управления ритмом

Модель 559Представление 561Контроллер 564Анализ паттерна Стратегия 567Адаптация модели 568Можно переходить к HeartController 569MVC и Веб 571Паттерны проектирования и Модель 2 579Новые инструменты 582Ответы к упражнениям 583BeatModelКонтроллерsetBPM()getBPM()on()off()Щелкните на кнопке увеличения

Контроллер приказывает модели увеличить частоту на 1.Представление оповещается об изменении частоты. Оно вызывает метод getBPM() для получения состояния модели.Так как установлена частота 120 BPM, представление получает оповещения каждые 1/2 секунды.Генерируется ритм с частотой 119 BPM; вы хотите увеличить его до 120

это приводит к активизации контроллера.Представление обновляется новым значением 120 BPM.Полоса пульсирует каждые 1/2 секунды.ПредставлениеПредставление2313Паттерны в реальном миреВы стоите на пороге дивного нового мира, населенного паттернами про-ектирования. Но прежде чем открывать дверь, желательно изучить некоторые технические тонкости, с которыми вы можете столкнуться — в реальном мире жизнь немного сложнее, чем здесь, в Объектвиле. К счастью, у вас имеется хороший путеводитель, который упростит ваши первые шаги

Паттерны для лучшей жизниРуководство по использованию паттернов 600Определение паттерна проектирования 601Подробнее об определении паттерна проектирования 603Да пребудет с вами Сила 604Каталоги паттернов 605Как создавать паттерны 608Хотите создавать паттерны? 609Классификация паттернов проектирования 611Мыслить паттернами 616Разум и паттерны 619И не забудьте о единстве номенклатуры 621Пять способов использования единой номенклатуры 622Прогулка по Объектвилю с «Бандой Четырех» 623Наше путешествие только начинается

Другие ресурсы, посвященные паттернам 625Разновидности паттернов 626Антипаттерны и борьба со злом 628Новые инструменты 630Покидая Объектвиль

«Банда Четырех»Ричард ХелмЭрик ГаммаДжон Влиссидес

Ральф Джонсон

Руководство по эффективному использованию паттерновВашему вниманию предлагается руководство с полезными советами, которые помогут вам использовать паттерны в реальном программировании. В этом руководстве вы

познакомитесь с распространенными заблуждениями относительно определения «паттерна проектирования»;

узнаете, что такое каталоги паттернов и для чего они нужны;

обойдете неприятности, связанные с несвоевременным использованием паттернов;

изучите классификацию паттернов;

увидите, что построение паттернов доступно не только экспертам; прочитайте нашу краткую сводку правил, и вы тоже сможете создавать свои паттерны;

узнаете состав таинственной «Банды Четырех»;

научитесь тренировать свой разум, как истинный мастер Дзен;

освоите основную терминологию паттернов.24 14Приложение: Другие паттерныНе каждому суждено оставаться на пике популярности. За последние 10 лет многое изменилось. С момента выхода первого издания книги «Банды Четырех» разработчики тысячи раз применяли эти паттерны в своих проектах. В этом при-ложении представлены полноценные, первосортные паттерны от «Банды Че-тырех» — они используются реже других паттернов, которые рассматривались ранее. Однако эти паттерны ничем не плохи, и если они уместны в вашей ситуа-ции — применяйте их без малейших сомнений. В этом приложении мы постара-емся дать общее представление о сути этих паттернов.Мост 634Строитель 636Цепочка Обязанностей 638Приспособленец 640Интерпретатор 642Посредник 644Хранитель 646Прототип 648Посетитель 650MenuItemMenuIngredientMenuItemIngredientVisitor

Client / TraversergetState()getState()getState()getState()getState()getHealthRating()getCalories()getProtein()getCarbs()Этим классам остается лишь добавить метод getState().Клиент запрашивает у посетителя информацию из составной структуры

Новые методы включаются в посетителя без изменения составной структуры.Посетитель вызывает методы getState() разных классов; именно здесь добавляются новые методы, используемые клиентом.Traverser знает, как управлять действиями посетителя с составной структурой.

Также вы можете оставить вопрос или отзыв о книге: Head First. Паттерны проектирования. Обновленное юбилейное издание, Фримен Э.

Отзывы

Отзывов пока нет.

Будьте первым, кто оставил отзыв на “Head First. Паттерны проектирования. Обновленное юбилейное издание, Фримен Э.”

Ваш e-mail не будет опубликован. Обязательные поля помечены *