簡體   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