Шаблон проектирования фабрика в Java


Я в настоящее время пытается понять основы Заводского метода в Java, и я нашел много примеры, где шаблон, как это было использовано.
У меня есть некоторые упражнения, про алгоритмы сортировки, где одна задача-написать класс фабрики для всех существующих алгоритмов, но с требованием, что недавно добавленных алгоритмов могут быть интегрированы через "подключи и играй". Эта фраза чесались me.By с помощью switch case решение я не смогла бы добавить алгоритмы без переписывания класса фабрики, так что я придумал это:

SorterFactory.java

public final class SorterFactory
{

  private SorterFactory()
  {
  }

  public static Sortierer.Sorter getNewSorter( Sorts sorts )
  {
    try
    {
      return (Sortierer.Sorter) Class.forName( sorts.getName() ).getConstructor().newInstance();
    }
    catch ( ClassNotFoundException | InstantiationException | IllegalAccessException
        | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
        | SecurityException e )
    {
      e.printStackTrace();
      // further exception handling
    }
  }
}

Sorts.java

public final class Sorts
{

  private String name;

  // hardcoded for test purpose.
  // will be imported from XML-file
  public static final Sorts HEAPSORT = new Sorts( HeapSort.class.getName() );
  public static final Sorts MERGESORT = new Sorts( MergeSort.class.getName() );
  public static final Sorts BUBBLESORT = new Sorts( BubbleSort.class.getName() );
  public static final Sorts INSERTSORT = new Sorts( InsertSort.class.getName() );
  public static final Sorts QUICKSORT = new Sorts( QuickSort.class.getName() );
  public static final Sorts TRUEHEAPSORT = new Sorts( TrueHeapSort.class.getName() );

  private Sorts( String name )
  {
    this.name = name;
  }

  public String getName()
  {
    return name;
  }
}

Так почему switch case подход гораздо более выгодном положении, выше подобного решения с точки зрения безопасности и производительности? Также это полезно для коробки имен в классе, чтобы не допустить неправильного использования метод фабрики вместо того, чтобы позволить строк в качестве аргументов?

Спасибо за любые советы и критику.



Комментарии
1 ответ

В целом отражение медленно (относительно), делает код труднее понять и почти невозможно отлаживать, если что-то идет неправильно.

Поэтому если вы уже знаете точное классе это гораздо лучше, чтобы проверить компилятор против опечатка для вас во время компиляции.

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


Это не совсем понятно, от общества постановка проблемы вы дали, но, возможно, ты не так понял чем они ожидали.

Еще одна интерпретация метод фабрики шаблон ожидает вас предоставить заводские интерфейса. Этот интерфейс определяет один или несколько методов, которые создают некоторые Sorter. Таким образом, вы можете "заткнуть" в любой другой фабрики, чтобы использовать другой Sorter. (Что, по сравнению с просто затык в другом сортировщик напрямую, полезна только в случае определенных сортировщиков требует что-то дополнительно для их создания. Например, дополнительный входной параметр.)

Обратите внимание, что это еще, как правило, определяется во время компиляции.

1
ответ дан 6 апреля 2018 в 10:04 Источник Поделиться