Паттерны проектирования Порождающие шаблоны
25 июня 2021

Паттерны проектирования.
Порождающие шаблоны

Фабричный метод, абстрактная фабрика, строитель, прототип.
… подождите, пожалуйста, минутку, я сейчас только запишу…
… ЦУП, я уже записываю…
    … разность потенциалов в точке p…
    Для каждого типа пишущего устройства свой метод, создающий устройства через new?
      public void Write(string text)
      {
      var device = new Pen/Pencil/Marker/…();
      device.Write();
      }
      
      Фабричный метод

      Фабричный метод (виртуальный конструктор, factory method) — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
        Зачем?

        • Отделяет код производства объектов от остального кода, который эти объекты использует.
        • Позволяет расширять классы вашего фреймворка через наследование путем переопределения метода, создающего объекты.
        • Позволяет экономить системные ресурсы путем повторного использования уже созданных объектов вместо порождения новых.
        Плюсы vs. Минусы

        Плюсы:
        • Избавляет главный класс от привязки к конкретным типам объектов.
        • Выделяет код производства объектов в одно место, упрощая поддержку кода.
        • Упрощает добавление новых типов объектов в программу.
        • Реализует принцип открытости/закрытости.

        Минусы:
        • Может привести к созданию больших параллельных иерархий классов, так как для каждого типа объекта надо создать свой подкласс создателя.
        Почему написано синим?

        • Записки заполняем синим, это правильно, но ключевые моменты выделяем красным.
        • В космосе записываем положительные результаты зеленым, отрицательные – красным.
        • На доске пишем основную информацию черным, ключевые моменты – красным.
        Абстрактная фабрика

        Абстрактная фабрика (Abstract Factory) — это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.
        Плюсы vs. Минусы

        Плюсы:
        • Гарантирует «сочетаемость» создаваемых объектов.
        • Избавляет клиентский код от привязки к конкретным типам объектов.
        • Выделяет код производства объектов в одно место, упрощая поддержку кода.
        • Упрощает добавление новых типов объектов в программу.
        • Реализует принцип открытости/закрытости.

        Минусы:
        • Усложняет код программы из-за введения множества дополнительных классов.
        • Требует наличия всех типов объектов в каждой вариации.
        Строитель

        Строитель — это порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово. Строитель даёт возможность использовать один и тот же код строительства для получения разных представлений объектов.
          Когда задуматься?

          • Если у Вас есть один конструктор с десятью опциональными параметрами. Его неудобно вызывать, поэтому Вы создали ещё десять конструкторов с меньшим количеством параметров. Всё, что они делают — это переадресуют вызов к базовому конструктору, подавая какие-то значения по умолчанию в параметры, которые пропущены в них самих.
          • Если создание нескольких представлений объекта состоит из одинаковых этапов, которые отличаются в деталях.
          • Если Вам нужно собирать сложные составные объекты, например, деревья Компоновщика.
          Плюсы vs. Минусы

          Плюсы:
          • Позволяет создавать объекты пошагово.
          • Позволяет использовать один и тот же код для создания различных объектов.
          • Изолирует сложный код сборки объекта от его основной бизнес-логики.

          Минусы:
          • Усложняет код программы из-за введения дополнительных классов.
          • Клиент может оказаться привязан к конкретным классам строителей, так как в интерфейсе строителя может не быть метода получения результата.
          Создадим клона, вырастим его, обучим и будем надеяться, что выйдет похоже на оригинал
          Нам нужно быстро, много и, самое главное, абсолютно идентично оригиналу
          Прототип

          Прототип — это порождающий паттерн проектирования, который определяет механизм копирования объектов без погружения в подробности их реализации.
          Плюсы vs. Минусы

          Плюсы:
          • Позволяет клонировать объекты, не привязываясь к их конкретным классам.
          • Меньше повторяющегося кода инициализации объектов.
          • Ускоряет создание объектов.

          Минусы:
          • Сложно клонировать составные объекты, имеющие ссылки на другие объекты.
          Вам также может быть интересно