您的位置:首页 > 其它

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

2014-05-27 19:53 316 查看
连贯接口(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、连贯接口可以应用在很多地方,在设计模式中,我所知道的一种就是应用于责任链模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息