这是什么图案名称?

时间:2018-12-01 17:29:41

标签: java design-patterns builder

关于以下示例中的模式,有人知道它的名称或创建者吗?似乎是GoF提出的Builder的一种变体。(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 :(得分:0)

我会这样做,以避免成员和方法名称相同的错误:

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)
  • 返回其他对象(例如球形对象)时,代码的可读性降低
  • 在同一行中调用方法时。由于将断点放在可能链接10个方法的行,调试起来会变得更加困难。