連貫接口(方法鏈)的使用

連貫接口(fluent interface),有時候也會叫做方法鏈(鏈式調用),可以起到簡化編碼的作用,同時保持對象間的貫通一致。

所謂的連貫接口/方法鏈,在平時編程中,也比較常見,下面舉幾個小例子:

hibernate 裏方法鏈的編程風格:

List results = session.createQuery("from users u order by u.age asc")
                            .setFirstResult(10)
                            .setMaxResutls(10)
                            .list();

java 裏 json 的操作:

JsonGenerator jsonGen = Json.createGenerator(swriter);
jsonGen.writeStartObject()
    .write("type", "chat")
    .write("from", chatMessage.getFrom())
    .write("fromName", chatMessage.getFromName())
    .write("to", chatMessage.getTo())
    .write("targetName", chatMessage.getTargetName())
    .write("message", chatMessage.getMessage())
.writeEnd();
jsonGen.close();

dom4j 裏的鏈式操作:

Element chatMessage = chatMessages.addElement("chatMessage")
    .addAttribute("fromUserId""1")
    .addAttribute("fromName", "tianya")
    .addAttribute("toUserId", "haijiao");

jquery 的鏈式調用:

//注意這樣做,只是爲了演示,可根據實際情況來調整
$(‘#id’).show().hide().show().hide().show().hide();

例子還有很多,大家可以多點積累,下面講一下連貫接口的設計要點:

1)相關方法或屬性方法的設計中,只有輸入參數或者無參數。

2)每個連貫方法的返回值都是一個類型實例,但不要求返回自身。

一個小小的示例:

public class User {
    private String name;
    private String password;
    private int age;
    
    public String getName() {
        return name;
    }
    public User setName(String name) {
        this.name = name;
        return this;
    }
    public String getPassword() {
        return password;
    }
    public User setPassword(String password) {
        this.password = password;
        return this;
    }
    public int getAge() {
        return age;
    }
    public User setAge(int age) {
        this.age = age;
        return this;
    }
    
    @Override
    public String toString() {
        return "[name:"+name+" password:"+password+" age:"+age+"]";
    }
    
    public static void main(String[] args) {
        User user = new User();
        user.setName("tianya").setPassword("123456").setAge(22);
        System.out.println(user);    //輸出:[name:tianya password:123456 age:22]
    }
}

附:

1、連貫接口的使用,一般來說在設置基本類型數據時,都是沒有問題的.可對於設置對象,處理不好,可能會出現空指針錯誤,在 hibernate 的 javabean 裏使用連貫接口,就有可能出現這種問題了(設置了一個引用對象).

2、連貫接口可以應用在很多地方,在設計模式中,我所知道的一種就是應用於責任鏈模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章