Java Builder模式传递到会话JSP servlet



我刚刚开始从Wiki学习和实现构建器模式。还有Effective Java的CH2。

这与JSPServlets有关,这可能有点复杂,但我只是想把它传给你们,看看如何正确地做到这一点。

让我们从一个场景开始,在这个场景中,你不能完全构建对象——有些信息没有给出。因此,很可能您必须将对象放入会话中,然后在稍后向会话对象添加变量。我将如何使用构建模式来实现这一点?

以下是的代码示例

public class Widget(){
     public static class Builder(){
           public Builder(String id) {...}
           public Builder serialNumber (String val) {...}
           public Builder area (String val) {...}
           public Widget build() { return new Widget(this); }
     }
  private Widget(Builder builder){...}
}

JSP Servlet 1//只有ID信息

Widget w = new Widget().Builder(id).build();
HttpSession session = request.getSession();
session.setAttribute("widget", w);

JSP Servlet 2//现在我有了串行和区域

Widget.Builder w = (Widget.Builder) session.getAttribute("widget");
//** This is as far as I go **
w.serialNumber("something") //  Now this works
 .area("sideArea")          //
 .build()                   //  < I know if I do this I will be creating another Object.  Is there a way to use build pattern without creating redundant obj?

谢谢大家。。。

w.serialNumber("something") //  Can not find symbol

因为serialNumber不是w对象的方法。你可能正在寻找的是方法链:

public class Widget {
    ... //assuming you have all the right fields here
    public Widget setSerialNumber(String id) {
        this.id = id;
        return this;
    }
    public Widget setArea(String area) {
        this.area = area;
        return this;
    }
    public static class Builder(){
        public Builder(String id) {...}
        public Builder serialNumber (String val) {...}
        public Builder area (String val) {...}
        public Widget build() { return new Widget(this); }
    }
    private Widget(Builder builder){...}
}

然后你可以做这样的事情:

w.setSerialNumber(id).setArea(area);

当您想要构建一个新的Widget对象时,请使用Widget.Builder;当您想要更改一个现有的Widget物体时,则使用方法链接。

最新更新