Что такое фабричный метод в Java?

Проще говоря, шаблон фабрики Java помогает создавать экземпляры для ваших классов. Поскольку название означает «Фабрика», это место, где создаются различные продукты, которые похожи по функциям, но разделены на категории. Итак, давайте углубимся и разберемся с концепцией метода Factory в Java.

Что такое фабричный шаблон Java?

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

В двух словах, суперкласс определит все стандартные и общие варианты поведения, а затем делегирует подробности создания подклассам, предоставленным клиентом.

Преимущества

  1. Созданный объект можно использовать без дублирования кода.
  2. Если вы используете фабричный метод вместо конструктора, то фабричный метод также может иметь другие имена .
  3. Кроме того, он удаляет экземпляр классов реализации из клиентского кода.
  4. Этот метод делает код более надежным, менее связанным и легко расширяемым.
  5. Фабричный шаблон через наследование обеспечивает абстракцию между реализацией и клиентскими классами.

Реализация

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

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

Прежде всего, создается интерфейс:

 public interface Shape 
{ 
void draw(); 
}

Затем создаются конкретные классы для реализации интерфейса следующим образом:

 public class Rectangle implements Shape 
{ 
@Override public void draw() 
{ 
System.out.println("Rectangle::draw() method."); 
} 
} 
public class Square implements Shape 
{ 
@Override public void draw() 
{ 
System.out.println("Square::draw() method."); 
} 
}
public class Circle implements Shape 
{ 
@Override public void draw() 
{
System.out.println("Circle::draw() method."); 
} 
}

После создания конкретных классов создается фабрика для создания объектов.

 public class ShapeFactory 
{ 
//use getShape method to get object of type shape 
public Shape getShape(String shapeType)
{ 
if(shapeType == null)
{ 
return null; 
} 
if(shapeType.equalsIgnoreCase("CIRCLE"))
{ 
return new Circle(); 
} 
else if(shapeType.equalsIgnoreCase("RECTANGLE"))
{ 
return new Rectangle(); 
} 
else if(shapeType.equalsIgnoreCase("SQUARE"))
{ 
return new Square(); 
} 
return null; 
} 
}

Теперь фабрика создана для использования объектов конкретных классов для передачи необходимой информации:

 public class FactoryPatternDemo
{ 
public static void main(String[] args) 
{ 
ShapeFactory shapeFactory = new ShapeFactory();
//get an object of Circle and call its draw method. 
Shape shape1 = shapeFactory.getShape("CIRCLE"); 
//call draw method of Circle shape1.draw();
//get an object of Rectangle and call its draw method. 
Shape shape2 = shapeFactory.getShape("RECTANGLE"); 
//call draw method of Rectangle 
shape2.draw(); 
//get an object of Square and call its draw method.
Shape shape3 = shapeFactory.getShape("SQUARE"); 
//call draw method of square 
shape3.draw(); 
} 
}

Вывод:

Circle::draw() method.
Rectangle::draw() method.
Square::draw() method.

Оцените статью