SlideShare a Scribd company logo
1 of 54
ВАМ ПРИВЕТ
Advanced OOP :
Структурные паттерны
You are Ready?
Alexander Babenko (HuktoDev)
iOS Developer
Improve Digital
Адаптер (Adapter)
Alternate Name : (Wrapper)
•
•
•
•
Мотивация
•
UML-диаграмма
•
•
•
•
•
•
•
Результаты и нюансы использования :
Сменный адаптер (динамический)
Двусторонний адаптер
•
•
•
•
•
Сменный адаптер
Адаптируемый (Плагин)
Ядро плагина (Плагин Handler)
CustomPluginProtocol
PrivatePluggableAdapterProtocol
Плагины :
•
•
•
•
Пример :
Мост (Bridge)
Alternate Name : (Handle/Body)
•
Суть проблемы :
Абстракция Реализация
Некорректное состояние дел :
•
•
•
•
•
Способ решения :
Spoiler:
Я выделил 2 различных типа Моста :
Мост по типу : Абстракция -> Реализация
Мост по типу : Публичная абстракция -> Приватная абстракция
MARK: Второй вариант - более общий и гибкий случай, но применимый
только в самых “запущеных” вариантах!
Абстракция -> Реализация :
Конкретная технология
моста
Реализация 1
Реализация 2
Реализация 3
Единая абстракция
Базовый класс семейства приватных объектов
Публичная абстракция (Window на экране)
Конкретный интерфейс абстракции
Базовый/Абстрактный класс
Конкретный подкласс
Публичная абстракция -> Приватная абстракция :
Приватная абстракция (Window на экране iPhone)
Конкретный интерфейс абстракции
Реализация конкретного подкласса в семействе
<WindowProtocol>
Window
AlertWindow
<iOSWindowProtocol>
iOSWindow / tvOSWindow / AndroidWindow
iOSAlertWindow
Конкретная
технология
моста
Window
AlertWindow
OverlayWindow
View
•
Особенности моста :
•
•
Примеры плохих интерфейсов :
•
•
•
MARK: С помощью протоколов это можно обойти :
такие методы можно объявлять, как optional
(необязательная имплементация)
•
•
•
•
•
•
Еще некоторые преимущества
•
•
•
•
Способы реализации моста :
Классическая реализация моста
•
•
•
•
•
•
Подход с помощью
абстрактных классов :
•
•
•
Подход с помощью протоколов :
•
•
•
•
Подход с помощью isa-Swizzling :
•
•
Параллельные иерархии
View
Label
ImageView
VideoView
iOSView
iOSLabel
iOSImageView
iOSVideoView
Параллельные композиции
Presenter
View
Interactor
Router
Assembly
ViewInput/ViewOutput
InteractorInput/InteractorOutput
ModuleInput/ModuleOutput
RouterInput
AssemblyProtocol
Presenter
View
Interactor
Router
Assembly
ViewInput/ViewOutput
InteractorInput/InteractorOutput
ModuleInput/ModuleOutput
RouterInput
AssemblyProtocol
Presenter
View
Interactor
Router
Assembly
ViewInput/ViewOutput
InteractorInput/InteractorOutput
ModuleInput/ModuleOutput
RouterInput
AssemblyProtocol
BaseCommon module
Login module
StartGuest module
•
•
•
•
•
Использование параллельности
MARK: Для крупных параллельных подсистем -
выгодно использовать кодогенераторы.
Generamba for Example
MARK: Для создания юнитов(модулей) параллельных подсистем
хорошо используется Абстрактная фабрика
•
•
•
•
•
Предостережение
Компоновщик
(Composite)
•
Мотивация :
•
•
•
•
Отступление про иерархии :
•
•
•
UML-диаграмма Компоновщика
•
•
•
•
Известные примеры компоновки :
•
•
•
•
•
Нюансы реализации:
По сути есть только 3 варианта :
•
•
•
•
•
Нюансы реализации:
•
•
•
•
•
•
•
Пример реализации:
•
Пример реализации:
•
•
•
Пример реализации:
Фасад
(Facade)
•
Мотивация :
•
•
•
Результат :
•
•
•
•
•
•
•
About Facade :
•
•
•
•
•
•
Нюансы использования и реализации :
•
•
•
•
•
•
•
•
Примеры использования :
Связи с другими паттернами :
•
•
•
•
•
•
•
Альтернативный фасад
•
•
•
Заместитель (Proxy)
Alternate Names :
(Surrogate / Promise)
•
Мотивация :
•
•
•
•
•
•
Примеры использования :
• •
UML-диаграмма Proxy
Сравнение Proxy со схожими шаблонами :
•
•
•
Примеры использования в iOS :
•
•
•
•
•
•
•
Технологии для проксирования в obj-c
•
•
•
• void NSInvocation
Можно изменить вызов, подделать любой параметр, выполнить произвольный код,
в т.ч. перенаправить Invocation на другой объект, и даже подменить селектор!
Срабатывает в том случае, если метод не был найден ни в классе, ни в одном из суперклассов
• id SEL
Достаточный метод для простого перенаправления на подходящий таргет
(реальный объект. ). Срабатывает, если в классе и суперклассах не реализован
метод по заданному селектору. Можно указать таргет, у которого поискать селектор
Приспособленец
(Flyweight)
•
Мотивация :
•
•
•
Примеры из реальной жизни :
•
•
•
•
•
•
UML-диаграмма Flyweight
•
•
•
•
Особенности реализации :
•
•
•
•
Родственные паттерны :
•
СПАСИБО ЗА ВНИМАНИЕ
Если у вас возникли вопросы, я с удовольствием
обсужу их с вами.
Alexander Babenko (HuktoDev)
iOS Developer
Improve Digital

More Related Content

Similar to Structural Design Patterns

Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
PureMVC в картинках - часть 1
PureMVC в картинках - часть 1PureMVC в картинках - часть 1
PureMVC в картинках - часть 1Rostyslav Siryk
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven developmentTestableapple
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpGoSharp
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpgeekfamilyrussia
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...DevGAMM Conference
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?etyumentcev
 

Similar to Structural Design Patterns (20)

Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
PureMVC в картинках - часть 1
PureMVC в картинках - часть 1PureMVC в картинках - часть 1
PureMVC в картинках - часть 1
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Step 1
Step 1Step 1
Step 1
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 

Structural Design Patterns