Шаблоны проектирования от Tutorials — сила ООП (часть 1)
Шаблон Faceted and Fluent Builder
Обновлено 30 марта 2019 г., 20:00 по Гринвичу, 5:30+
Предварительные требования — для этой серии блогов требуется средний уровень знаний в области объектно-ориентированного программирования. Вы должны иметь базовые знания о классе, объекте, конструкторе, наследовании, значении и типе ссылки. Промежуточные звенья получат знания, а эксперты отточат свои знания, прочитав эту серию от начала до конца.
Шаблоны проектирования используются для представления лучших практик, принятых опытным сообществом разработчиков объектно-ориентированного программного обеспечения.
Шаблон проектирования Builder помогает нам создавать объекты более простым и читабельным способом. Шаблон проектирования Builder следует двум простым правилам, как указано ниже.
- Разделите исходное представление класса и методы его построения.
- возвращает экземпляр класса на последнем шаге
Проблема:
Подумайте о классе сказать Человек иметь десять или более свойств, отображая дизайн своего конструктора, когда вам нужно создать экземпляр класса Человек. Его конструктор будет принимать десять или более аргументов, будет сложно управлять этим множеством аргументов как одной функцией или конструктором, и в конечном итоге вы потеряете читабельность кода. проверить приведенный ниже пример.
Пример без шаблона дизайнаExample1.swift
Попробуйте запустить приведенный выше пример на игровой площадке, он успешно запустится и выдаст ожидаемый результат. Логически это правильно.
Мы можем улучшить приведенный выше пример, преодолев следующие пункты.
- Мы должны передавать значения в указанном порядке, не можем изменить порядок последовательности параметров, чтобы улучшить читаемость.
- Мы должны передать все значения, даже если мы не знаем некоторых значений на момент создания объекта.
Например, предположим, вам нужно создать объект Человек класс, но человек все еще находит работу. Когда этот человек присоединится к какой-либо компании, только у нас будет информация о работе.
Решение:
- Создавайте логические группы связанных свойств.
- Создавайте отдельные классы построителей для разных групп свойств.
- Получите экземпляр на последнем шаге.
Давайте упростим это на примере,
У нас уже есть класс с именем Человек в примере Без шаблона дизайнаExample1.swift, в котором у нас есть 14 свойств. Если мы внимательно проверим все 14 свойств, свойства имеют 4 логические группы.
- Свойства личных данных
- Свойства контактной информации
- Свойства сведений об адресе
- Сведения о компании свойства
Шаблоны проектирования Faceted и Fluent вместе помогают нам преодолеть две проблемы, упомянутые выше.
В приведенном выше примере мы разделили обязанности Человек класс в разных классах. Человек class теперь содержит только свойства данных, в то время как мы создали несколько классов-строителей, отвечающих за создание/обновление относительной группы свойств.
У нас есть один базовый класс строителя PersonBuilder и иметь еще четыре производных класса построителя с именем PersonPersonalDetailsBuilder, ЧеловекКонтактДеталиBuilder, PersonAddressDetailsBuilder а также ЧеловекКомпанияДеталиBuilder.
Базовый класс PersonBuilder помогает нам переключаться между несколькими билдерами в любое время, в то время как другие четыре билдера являются производными от PersonBuilder иметь обязанности по обновлению относительных свойств.
В приведенном выше примере мы можем ясно видеть, что построение Человек объект более читабелен по сравнению с нашим первым примером Без шаблона дизайнаExample1.swift также мы можем обновить группу свойств или любое отдельное свойство в любое время более читабельным образом.
Обратите внимание, что в приведенном выше примере мы возвращаем сам экземпляр построителя после вызова каждого метода обновления свойства. Это помогает нам писать цепочки из нескольких методов одного и того же компоновщика вместо того, чтобы писать несколько строк по отдельности. Эта концепция известна как шаблон Fluent.
Преимущества:
- Легко инициализировать объект класса, имеющего слишком много свойств, более читаемым образом.
- Следует принципу единой ответственности.
- Инициализируйте объект или обновите свойства в любом удобном для вас порядке.
Не стесняйтесь писать свои мысли или вопросы об этом блоге. Я отвечу на все вопросы. Понравилась эта статья? Хотите поддержать мою работу? Будь моим покровителем.
Куда пойти отсюда?
Прочтите другие части этой серии «Шаблоны проектирования от учебных пособий — сила ООП»
Часть 1: Шаблон Faceted и Fluent Builder в Swift
Часть 2: Шаблон проектирования Singleton в Swift
Читайте мою последнюю серию «Протокол — сила Swift».
Часть-1: Что такое приведение типов и типы классов?
Часть 2: Соответствие протоколу
Часть-3: Состав протокола
Часть-4: Мое эмпирическое правило для возможных типов данных
Часть-5: Протокол как супертип
Найдите мои репозитории на Гитхаб
Читайте мои блоги на Середина
Соедините меня через LinkedIn
Следуй за мной на Твиттер
Будь моим покровителем
Скоро будут новые запчасти…
Понравилась эта статья?
Хлопайте и поддерживайте, подписывайтесь на мой профиль
Оставайтесь с нами, @hitendrahckr печатает