Java Builder 模式传递给 session JSP servlet

标签 java jsp session servlets

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

这与 JSP servlet 相关,这可能有点复杂,但我只是想将其传递给你们,看看如何正确地做到这一点。

让我们从一个场景开始,您无法完全构建对象,并且未给出某些信息。因此,很可能您必须将对象放入 session 中,然后稍后将变量添加到 session 对象中。我如何使用构建模式来实现这一点?

这是一个代码示例

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对象的方法。您可能正在寻找的是 method chaining :

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 对象时,请使用方法链。

关于Java Builder 模式传递给 session JSP servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23146323/

相关文章:

java - 读取文件时需要相应地跳过行号(了解更多)

javascript - 需要多人游戏服务器配置的建议

php - CakePHP session 读取未设置的变量

java - 出现 fatal error : jni. h : No such file or directory #include <jni. h>

java - JBOSS 6.2 - 新的缺失/不满足的依赖项(对于 mysql 驱动程序)

java - 在一个 catch block 中处理所有 Java 异常

java - 我在理解 Head First Java Bean 解释时遇到的问题

java - 如何在 Intellij 中使用 Tomcat 8?

php - $_SESSION 与 Ajax

java - 如何从android中的json url获取新的数据更新?