Шаблон Factory Method является одним из популярных шаблонов креативного дизайна. Он специально не полагается на фабричный объект для создания объектов. Скорее, идея состоит в том, чтобы использовать отдельный метод в том же классе для создания объекта.
Шаблон Factory Method определяет интерфейс для создания объектов, но позволяет подклассам решать, как создавать экземпляры своих объектов. Каждый подкласс должен определять свой фабричный метод.
В этом уроке мы узнаем, как реализовать шаблон проектирования Factory Method с помощью примера VehicleStore .
Определение VehicleStore :
Давайте начнем с определения класса VehicleStore :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
public abstract class VehicleStore { public Vehicle orderVehicle(VehicleType type) { Vehicle vehicle = createVehicle(type); vehicle.getServiced(); vehicle.polish(); vehicle.provideClearance(); return vehicle; } public abstract Vehicle createVehicle(VehicleType type); } |
Где VehicleType — это перечисление, определяющее тип транспортного средства:
1
|
public enum VehicleType { BIKE, CAR, TRUCK, CRANE }; |
Обратите внимание, что мы определили метод createVehicle () как абстрактный ; тот, который будет нести ответственность за создание определенного типа транспортного средства.
Определение подклассов:
Теперь предположим, что у нас есть два типа магазина транспортных средств — LightVehiclesStore и HeavyVehiclesStore :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
public class LightVehiclesStore extends VehicleStore { @Override public Vehicle createVehicle(VehicleType type) { switch (type) { case BIKE : return new Bike(); case CAR : return new Car(); } return null ; } } public class HeavyVehiclesStore extends VehicleStore { @Override public Vehicle createVehicle(VehicleType type) { switch (type) { case TRUCK : return new Truck(); case CRANE : return new Crane(); } return null ; } } |
LightVehiclesStore отвечает за продажу легких транспортных средств, таких как велосипед или автомобиль. С другой стороны, HeavyVehiclesStore продает грузовики и краны.
Как мы видим, оба эти подкласса переопределяют метод createVehicle () .
Диаграмма UML для нашего примера:
Мы можем представить приведенный выше пример с помощью диаграммы UML, аналогичной следующей:
Тип транспортного средства, которое мы создаем, определяется в конкретных подклассах. Кроме того, мы обозначили VehicleStore как общий интерфейс для этих подклассов.
Далее мы можем сделать шаг вперед и определить Factory Object для VehicleStore, чтобы не подвергать эти подклассы непосредственно клиентскому коду.
Вывод:
В этом уроке мы изучили важный шаблон творчества — шаблон метода фабрики. Основная идея этого шаблона — позволить подклассам решать, как создавать экземпляры объектов.
Некоторые из популярных реализаций этого шаблона доступны в нашем Java API. Некоторые из них включают методы Calendar.getInstance () , java.text.NumberFormat.getInstance () и java.util.ResourceBundle.getBundle () .
Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Factory Method Design Pattern Мнения, высказанные участниками Java Code Geeks, являются их собственными. |