gpt4 book ai didi

Java Builder 模式传递给 session JSP servlet

转载 作者:行者123 更新时间:2023-12-01 13:07:39 25 4
gpt4 key购买 nike

我刚刚开始学习和实现构建器模式 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com