Статьи

Фабрика Метод Дизайн Шаблон

Шаблон 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, являются их собственными.