Просто о сложном
Olga Rabodzei -
шаблоны проектирования
Немного о себе
orabodzei@gmail.com
Olga Rabodzei
Senior Drupal developer
For whom is this presentation?
Для кого этот доклад?
Tips about UML and OOP
Напоминание о UML и ООП
Так что же такое паттерны проектирования?
image
What is design pattern?
Что такое паттерн проектирования?
Порождающие
Types of GoF patterns
Типы GoF паттернов
Creational
Структурные
Поведенческие Behavioral
Structural
Фабричный метод
Абстрактная фабрика
Строитель
Прототип
Одиночка
Creational patterns
Порождающие паттерны
Factory Method
Abstract Factory
Builder
Prototype
Singleton
Одиночка — порождающий шаблон
проектирования, гарантирующий,
что в однопроцессном приложении
будет единственный экземпляр
некоторого класса, и
предоставляющий глобальную точку
доступа к этому экземпляру.
Singleton - Definition
Одиночка
Where is it in Drupal?
Singleton - Criticism
Одиночка - Критика
Достоинства:
Недостатки:
Используется, когда:
● классу заранее неизвестно, объекты каких подклассов ему нужно
создавать.
● класс спроектирован так, чтобы объекты, которые он создает,
специфицировались подклассами.
● класс делегирует свои обязанности одному из нескольких
вспомогательных подклассов, и планируется локализовать знание о
том, какой класс принимает эти обязанности на себя
Factory method - Definition
Фабричный метод
Задача: Определить интерфейс для создания объекта, но оставить
подклассам возможность решения о том, какой класс инстанцировать.
Factory method - Solution
Фабричный метод
abstract
Parent
Child 1 Child 2
Abstract
Creator 2 Creator 1
Client
Классическое описание
Factory method - Solution
Фабричный метод
abstract
Parent
Child 1 Child 2
Abstract
Creator 2 Creator 1
Client
Классическое описание
Creator
Factory method - In Drupal
Фабричный метод
Plugin
Factory
Block
Type 1
Block
Type 2
Client
Where is it in Drupal?
Достоинства:
Недостатки:
Factory method - Criticism
Фабричный метод
Адаптер
Мост
Компоновщик
Декоратор(?)
Фасад
Приспособленец
Заместитель
Structural patterns
Структурные паттерны
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Adapter - Definition
Адаптер
Задача: Система поддерживает
требуемые данные и поведение, но
имеет неподходящий интерфейс.
Способ решения: Адаптер
предусматривает создание класса-
оболочки с требуемым интерфейсом.
Adapter - Solution
Адаптер
IExternal
Service
IService
Service
Adapter
Client
Adapter - In Drupal
Адаптер
IExternal
Service
Serialization
Interface
Json
Client
Yaml
Where is it in Drupal?
Adapter - Criticism
Адаптер
● Инкапсуляция реализации внешних классов
(компонентов, библиотек), система становится
независимой от интерфейса внешних классов;
● переход на использование других внешних
классов не требует переделки самой системы,
достаточно реализовать один класс Adapter.
Задача: Необходимо контролировать доступ к
объекту, не изменяя при этом поведение клиента.
Способ решения:
Создать суррогат реального объекта.
«Заместитель» хранит ссылку, которая позволяет
заместителю обратиться к реальному субъекту
Proxy - Definition
Заместитель
Proxy - Solution
Заместитель
IService
Service
Client
Proxy
Proxy - In Drupal
Заместитель
Where is it in Drupal?
Account
Interface
User
Client
Account
Proxy
Proxy - Criticism
Заместитель
Достоинства:
Недостатки:
Цепочка обязанностей
Команда
Итератор
Посредник
Хранитель
Наблюдатель
Посетитель
Стратегия
Состояние
Шаблонный метод
Behavioral patterns
Поведенческие паттерны
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
Visitor
Strategy
State
Template Method
Observer - Definition
Наблюдатель
Задача: Определить зависимость типа один ко многим между
объектами таким образом, что при изменении состояния одного
объекта все зависящие от него оповещались об этом событии.
Способ решения: Определить интерфейс
“Подписки”. Объекты-подписчики реализуют
этот интерфейс и динамически
регистрируются для получения информации
о событии. Затем, при возникновении
события, оповещаются все подписчики.
Observer - Solution
Наблюдатель
IObservable
-list of listeners
+ Add to list()
+ Remove from list ()
+Notify()
Observable
+HandleEvent()
IListener
Listener
1..n
Observer - Criticism
Наблюдатель
Достоинства:
Недостатки:
Observer - in Drupal
Наблюдатель
Where is it in Drupal?
Обратите внимание!
Think twice!
Pattern is
not
specifying
the finalapplication
Don’t do
overhead
Use pattern
when you sure
for 100%
CONFIDENTIAL | © 2019 EPAM Systems, Inc.
Become a Drupal contributor
Sunday from 10 am
● First timers workshop
● Mentored contribution
● General contribution

DESIGN PATTERNS? EASY!