Максимально просто и своими словами.
Шаблон проектирования — это, если максимально просто, описание типового способа решения какой-либо архитектурной проблемы. Шаблоны проектирования могут описывать то, как объект
Шаблоны проектирования разделяют на:
UIApplication
.Notification Center
или любыми реактивными фреймворками.UITableView
и UICollectionView
.Singleton (одиночка) — это порождающий шаблон, который гарантирует, что для некоторого класса существует всего один один экземпляр. Такое поведение достигается за счет создания глобальной точки доступа.
Пример реализации:
class App { static let shared: App = { App() }() } let appInstance = App.shared
Singleton предусматривает передачу экземпляра по ссылке, а значит для него необходимо использовать reference type. Так как структура является value type, то напрямую использовать для нее Singleton не представляется возможным.
Но при острой необходимости передачи структуры мы можем написать некую обертку (wrapper), которая будет передаваться по ссылке, но внутри себя хранить экземпляр структуры.
final class Ref { static let shared: Ref = { var item = Item() item.value = 101 return Ref(item) }() var instance: Item init( _ instance: Item) { self.instance = instance } } // Сама структура struct Item { var value = 100 } // Проверка работы let a = Ref.shared let b = Ref.shared a.instance.value = 102 b.instance.value // 102
Фасад — это шаблон проектирования, название которого говорит само за себя ?.
Фасад предусматривает, что вместо того, чтобы показывать пользователю множество классов, каждый из которых имеет собственное API, должен быть создан один класс, имеющий собственный API для взаимодействия с пользователем, принимающий запросы и делегирующий решение задач этим классам. Таким образом пользователь всегда общается только с одним классом и его API, вместо работы с множеством классов.
Декоратор — это шаблон проектирования, который предусматривает расширения и изменение поведения некоторого объекта без изменения его программного кода.
В общем случае для этого есть несколько вариантов:
extension
).Ни в одном из этих случаев программный код исходного класса не изменяется.
Паттерн предусматривает передачу ответственности за создание зависимостей, которые использует объект во время работы, то есть от которых зависит, некоторому внешнему компоненту. Таким образом объект не создает зависимости самостоятельно, а получает эти зависимости из вне.
Данный паттерн является одной из форм реализации принципа «Инверсия зависимостей (Inversion of Control)»
Выделяют следующие типы внедрения зависимостей: