Многие люди говорят, что они используют фабричный шаблон в своем проекте. Но когда я на самом деле вижу их реализацию, это выглядит совершенно иначе
Из определения, что я прочитал в главе первой книги. В книге они описали два вида фабричного образца, т.е.
Метод фабрики : - Класс указывает свои подклассы, чтобы указать, какие
объекты для создания на основе некоторого параметра. Итак, мы ожидаем здесь некоторые
абстрактный метод в базовом классе, который будет реализован ребенком
Класс и цель этого будет создать некоторый объект
Абстрактная фабрика : - Предоставляет фабрику (в форме интерфейса или
абстрактная фабрика) для создания семейств связанных или зависимых объектов
без указания их конкретных классов.
У меня здесь вопрос о том, что они подразумевают под семьей зависимых или связанных
объекты. Давайте обратимся к http://www.apwebco.com/gofpatterns/creational/AbstractFactory.html. Насколько я понимаю, это означает, что в FinancialToolsFactory
(в ссылке) можно создать TaxProcessor
, который является семейством продуктов, где фактически все продукты являются CanadaTaxProcessor
и EuropeTaxProcessor
. Таким образом, здесь у нас будет n
число конкретных фабрик (в данном случае CanadaFinancialToolsFactory
и EuropeFinancialToolsFactory
), которые будут расширять / реализовывать абстрактную фабрику в этом случае FinancialToolsFactory
.
Пожалуйста, дайте мне знать, если вышеприведенное понимание верно, поскольку я думаю, что это суть модели Фабрики.
Второй вопрос:
Ниже показано, что делают люди с названием фабричного образца:
public class MyFactory
{
public static <T> T getObject(Class<T> cls)
{
if (cls == null)
{
throw new IllegalArgumentException("Invalid className");
}
T daoObject = (T)map.get(cls);
if (daoObject == null)
{
daoObject = loadObject(cls);
}
return daoObject;
}
}
Они просто передают класс наподобие Example.class из метода main и получают экземпляр объекта для этого конкретного класса.
Теперь, если мы пойдем по фактическому понятию фабричного шаблона, который описан в начале (из первой книги), и другим веб-сайтам, это не будет следовать ни одному из двух фабричных шаблонов. Для меня это выглядит как служебный класс, где мы передаем класс и получаем экземпляр объекта. Пожалуйста, дайте мне знать, если вы, ребята, согласны с этим?