Рубрики
Без рубрики

Героический образец

Вступление К короткому блогу о том, как вы можете создать могучего бесстрашного героя! Я сделал это с помощью софта… С пометкой java, новички, дизайн.

Краткий блог о том, как вы можете создать могучего бесстрашного героя!

Могучий герой

Многие из нас в какой-то момент играли в RPG, такие как Diablo, lineage, WoW и т.д. Герой, с которым вы играете, обычно поставляется с кучей атрибутов. Например, сила, броня, ловкость и так далее, атрибуты мышления. Давайте посмотрим, как мы можем использовать шаблон Builder для создания этих могучих героев!

Герой-строитель

Конструктор – это элегантный способ создания объекта, имеющего множество атрибутов. Конечно, вы можете сделать это и с помощью других подходов, таких как:

  • телескопический конструктор (множество разных конструкторов с разными аргументами)
  • Java-компонент (например, простой pojo с сеттерами)

Что нужно для строителя:

  1. класс, который включает в себя атрибуты
  2. внутренний статический класс, этот класс устанавливает значения атрибутов, которые мы хотим

Это основные компоненты шаблона Builder/| .

В Герое два ингредиента сопоставляются со следующими фрагментами кода:

  1. класс героя, который содержит героические атрибуты (например, имя, расу, силу, ловкость, интеллект, живучесть, броню)

  2. статический класс 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”