连贯接口(方法链)的使用

连贯接口(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、连贯接口可以应用在很多地方,在设计模式中,我所知道的一种就是应用于责任链模式。

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