繁体   English   中英

这是什么图案名称?

[英]What pattern name is this?

关于以下样本模式,有人知道它的名称或创建者吗? 似乎是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;
        }
    }

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

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个方法的行,调试起来会变得更加困难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM