Какое имя образца это? - PullRequest
       9

Какое имя образца это?

0 голосов
/ 01 декабря 2018

О шаблоне, приведенном ниже, кто-нибудь знает его имя или создателя?Кажется, это вариант Builder, предложенный GoF. (https://en.wikipedia.org/wiki/Builder_pattern#Java)

Я думаю, что он достигает основной цели паттерна GoF с гораздо меньшим количеством кода. Я видел в некоторых рамках и начал использовать его много, но могуНе могу найти пропорцию. Спасибо за помощь.

 public class User {

        private String name;

        public User name(String name) {
            setName(name);
            return this;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

1 Ответ

0 голосов
/ 01 декабря 2018

Я бы пошел на это, чтобы избежать ошибки, связанной с тем, что имя и метод имеют одно и то же имя:

public class User {

    private String name;

    public String getName() {
        return name;
    }

    public User setName(String name) {
        this.name = name;
        return this;
    }
}

User user = (new User()).setName('Me').setPhone('1234');

Кажется, что имя шаблона - «свободный интерфейс», а «сцепление методов»называется его реализация методов сцепления.Практически, они описывают одно и то же, но «свободный интерфейс» был общепринятым названием для шаблона.

Вы можете объединить несколько методов (не только для задания свойств), включая различные объекты:

user.addBall(ball)
    .inflateAllBalls()
    .getFirstBall() // returns a ball
    .roll() // roll is a method in the Ball class
    .setColor("red");

Минусы чрезмерного использования метода:

  • Вы не можете проверять объекты, чтобы избежать исключений нулевого указателя (это самый большой недостаток IMO)
  • методы будут возвращать 'this'объект, который нелогичен (см. setName в моем примере)
  • при возврате других объектов, например объекта ball, читаемость кода уменьшается
  • при вызове методов в той же строке.отладку становится немного сложнее, потому что вы ставите точку останова в строке, где может быть объединено 10 методов.
...