Является ли шаблон метода Factory специализированным случаем шаблона метода Template? - PullRequest
0 голосов
/ 01 апреля 2019

GOF рассказывает о фреймворках для шаблона «Фабричный метод».Фреймворки нуждаются в объектах, но реализация объектов зависит от приложения, поэтому создается абстрактный метод для создания объекта.Кроме того, так как тип возвращаемого значения необходим для определения необходимого интерфейса для объекта, он определяет API, необходимые для объекта.Актуальные объекты создаются подклассами (конкретное приложение).Это шаблон создания.

Для шаблона шаблонное изменение состоит только в том, что инкапсулирующий класс не знает реализацию определенного поведения, поэтому он абстрагирует его в методе, использует его, но оставляет реализацию подклассам.Это поведенческий паттерн.

Единственными отличиями между ними являются

1. Factory method is creational and Template is behavioural.
2. Factory method abstracts a method to create an object where as template pattern abstracts a method for some policy or algorithm. 

пример кода

 /**factory-method example**/
 public abstract class Application{          
        public void create(){
              View contentView = createContentView();
              Menu menu = contentView.obtainMenu();
              generateMenuItems(menu);
        }
        public abstract View createContentView(); //factory-method
        public void generateMenuItems(Menu menu){
              // some code
        }
 }

  /** Product Specification**/            
 public interface View{
      public abstract Menu obtainMenu();
      // other abstract method of product
 }

Теперь код пользователя, использующийся выше, создаст подкласс Application и обеспечит реализацию для createContentView().

Базовая характеристика метода шаблона: конкретный метод родительского класса, вызывающий его абстрактный метод.

Метод фабрики: позволяет реализовать создание продукта его подклассами.

Приведенный выше пример подходит дляи то и другое.Фактически любой пример для методов Factory подходит и для метода Template.

Так что хорошо бы сказать

  1. Шаблон фабричного метода - это специализированный шаблонный шаблон для получения объекта, реализация которого зависит от пользовательского кода, который может обеспечить реализацию создания объектав подклассе
  2. Шаблон шаблона, если для создания объекта используется шаблон Фабрика.

Мое второе сомнение :для фабричного метода (который согласно GOF основан на инбертентности) обязательно вызывать его метод производства абстрактного продукта из своего другого конкретного метода?

Если ответом на выше является «Нет», то это означает, что будет какой-то потребителькод, который будет иметь экземпляр типа Factory (состав), вызовет метод factory для получения объекта продукта и получит конкретный класс фабрики.Но теперь это становится абстрактной фабрикой.

1 Ответ

1 голос
/ 03 апреля 2019

Я не хочу упрощать эти шаблоны, но, да, обе абстракции полностью откладывают детали реализации.Отделение клиентов от деталей реализации является более гибким и позволяет каждому развиваться независимо;в этом суть принципа обращения зависимостей.

  • Фабричный метод откладывает создание полностью
  • Стратегия откладывает поведение полностью

Чтобы ответить на комментарий выше:

  • Шаблонный метод откладывает поведение частично (не совсем то же самое)

Эти шаблоны не являютсяиспользуется исключительно, например, стратегия может использовать шаблонный метод, фабричный метод или другие шаблоны.

Надеюсь, это поможет!

...