Еще один паттерн, из группы поведенческих, — цепочка ответственности (chain of responsibility). Цепочка обязанностей выстраивает объекты составных частей приложения связанными между собой по цепочке, для передачи запроса на обработку от более низких, детализированных слоев системы к более высоким глобальным. Вот UML диаграмма: Классический пример это контекстная справка в Microsoft Office, вы можете нажать кнопку вопросительного знака и кликнуть на любом элементе интерфейса, а система попытается найти страницу справки, максимально соответствующую запрошенному элементу. Делается это следующим образом, — поскольку интерфейс системы иерархичен, то запрс справки начинает подниматься снизу вверх — от элемента по которому был произведен клик вверх, …
Month: April 2010
Последний паттерн из группы структурных, — Прокси. Его назначение в том, что бы добавлять дополнительный слой функциональности между клиентом и подсистемой (субъектом). В такой, казалось бы избыточной работе есть масса смысла и пользы, приведу несколько примеров когда это оправдано: субъект находится на другой машине и Прокси скрывает протокол доступа, при обращениях создает экземпляр субъекта, только когда это действительно надо, кеширует результаты. может контролировать права доступа при вызовах производит синхронные вызовы в асинхронной среде На диаграмме прокси выглядит так: Короткий пример Прокси: class XMPPRequest(): def __init__(self, connect): pass def send(self, to, text): return …
Следующий паттерн, — Приспособленец. Приспособленцы моделируют сущности, число которых слишком велико для представления объектами. В моем примере это отрисовка игровой карты (или участка карты). Например ваша карта состоит из плиток пола и стен, но по разному отрисовываются, с учетом света, времени суток, и других факторов. Создавать для каждого сегмента карты отдельный экземпляр, — слишком большая роскошь. Поэтому мы создаем по одному экземпляру каждого типа и с их помощью отрисовываем всю карту. На диаграмме Приспособленец, выглядит следующим образом: Имеет использовать Приспособленца если одновременно выполняются следующие условия: в приложении используется большое число обьектов, из-за этого высоки расходы …
Еще один паттерн из группы структурирующих, – фасад. Фасад предоставляет унифицированный интерфейс, “оборачивая” собой подсистему. Им пользуются в случае если необходимо изолировать клиента от “разухабистого” API подсистемы, упрощая его и сокращая количество объектов о которых должен знать клиент. Фасад может упростить переносимость кода между разными платформами или подсистемами. Вот как выглядит Фасад на диаграмме: Простой пример, реализующий Фасад на Python: class Tree: def grow(self): print("grow tree") class Child: def born(self): print("born child") class House: def build(self): print("build house") class TheMenFacade: …