Статьи

Шаблоны креационного дизайна: фабричный паттерн

Ранее у нас было введение в шаблоны создания и использование шаблона абстрактной фабрики для создания семейств объектов.

Следующим паттерном является Фабричный паттерн . Фабричный шаблон является одним из наиболее часто используемых шаблонов в Java.
Итак, что же такое Factory Pattern? Фабричный шаблон имеет дело с созданием объектов без указания точного класса или объекта, который будет создан.

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

Первым шагом является создание интерфейса ваучера.

1
2
3
4
5
6
7
8
package com.gkatzioura.design.creational.factory;
 
public interface Voucher {
 
    public String code();
 
    public String htmlMessage();
}

На данный момент у нас будет два типа ваучеров, но добавить их будет легче, если у деловых людей появятся новые идеи.

Первый — ваучер на еду.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.gkatzioura.design.creational.factory;
 
import java.util.UUID;
 
public class FoodVoucher implements Voucher {
 
    private UUID code;
    private static final String htmlMessage= "<html><body>
<h1>Food Voucher</h1>
 
</body></html>";
 
    public FoodVoucher() {
        code = UUID.randomUUID();
    }
 
    public String code() {
        return code.toString();
    }
 
    public String htmlMessage() {
        return htmlMessage;
    }
}

А второй — ваучер на одежду.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.gkatzioura.design.creational.factory;
 
import java.util.UUID;
 
public class ClothesVoucher implements Voucher {
 
    private UUID code;
    private static final String htmlMessage = "<html><body>
<h1>Clothes Voucher</h1>
 
</body></html>";
 
    public ClothesVoucher() {
        code = UUID.randomUUID();
    }
 
    public String code() {
        return code.toString();
    }
 
    public String htmlMessage() {
        return htmlMessage;
    }
}

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
package com.gkatzioura.design.creational.factory;
 
public class VoucherFactory {
 
    public Voucher create(Integer discountPoints) {
 
        if(discountPoints<=0) {
            throw new IllegalArgumentException("Invalid number of discount points!");
        }
 
        if(discountPoints<30) {
            return new FoodVoucher();
        } else {
            return new ClothesVoucher();
        }
    }
 
}

Подводя итог, выбрав заводской шаблон

  • Мы создаем необходимые ваучеры, не подвергая клиента какой-либо логике создания.
  • Клиенту не нужно указывать точный класс объекта, который будет создан.

Вы можете найти исходный код на github .

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

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

Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. Смотрите оригинальную статью здесь: Шаблоны креационного дизайна: Фабричный паттерн

Мнения, высказанные участниками Java Code Geeks, являются их собственными.