Краткий блог о том, как вы можете создать могучего бесстрашного героя!
Могучий герой
Многие из нас в какой-то момент играли в RPG, такие как Diablo, lineage, WoW и т.д. Герой, с которым вы играете, обычно поставляется с кучей атрибутов. Например, сила, броня, ловкость и так далее, атрибуты мышления. Давайте посмотрим, как мы можем использовать шаблон Builder для создания этих могучих героев!
Герой-строитель
Конструктор – это элегантный способ создания объекта, имеющего множество атрибутов. Конечно, вы можете сделать это и с помощью других подходов, таких как:
- телескопический конструктор (множество разных конструкторов с разными аргументами)
- Java-компонент (например, простой pojo с сеттерами)
Что нужно для строителя:
- класс, который включает в себя атрибуты
- внутренний статический класс, этот класс устанавливает значения атрибутов, которые мы хотим
Это основные компоненты шаблона Builder/| .
В Герое два ингредиента сопоставляются со следующими фрагментами кода:
класс героя, который содержит героические атрибуты (например, имя, расу, силу, ловкость, интеллект, живучесть, броню)
статический класс Builder, являющийся сердцем шаблона, используется для установки значений атрибутов
package heroic_pattern; public class Hero { private final String name; private final String race; private final int strength; private final int dexterity; private final int intelligence; private final int vitality; private final int armor; private final int damage; public static class Builder { // mandatory fields private String name; private String race; // default initial values private int strength = 0; private int dexterity = 0; private int intelligence = 0; private int vitality = 0; private int armor = 0; private int damage = 0; public Builder(String name, String race) { this.name = name; this.race = race; } public Builder strength(int val) { strength = val; return this; } public Builder dexterity(int val) { dexterity = val; return this; } public Builder intelligence(int val) { intelligence = val; return this; } public Builder vitality(int val) { vitality = val; return this; } public Builder armor(int val) { armor = val; return this; } public Builder damage(int val) { damage = val; return this; } public Hero build() { return new Hero(this); } } private Hero(Builder builder) { name = builder.name; race = builder.race; strength = builder.strength; dexterity = builder.dexterity; intelligence = builder.intelligence; vitality = builder.vitality; armor = builder.armor; damage = builder.damage; } @Override public String toString() { return "Hero [armor=" + armor + ", damage=" + damage + ", dexterity=" + dexterity + ", intelligence=" + intelligence + ", name=" + name + ", race=" + race + ", strength=" + strength + ", vitality=" + vitality + "]"; } }
Пожалуйста, обратите внимание, что атрибуты, которые являются обязательными, являются аргументами конструктора в классе Builder (например, name, race). Остальные атрибуты являются необязательными и имеют значение по умолчанию 0.
Давайте создадим несколько героев
Бонус за жаргон!
Шаблон builder приводит к fluent API (например, цепные методы).
Оригинал: “https://dev.to/konstantinosblatsoukasrepo/a-heroic-pattern-5caa”