有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

设计模式java如何扩展违反openclosed原则的应用程序

我试图扩展用Jelly&;编写的web应用程序的功能;爪哇

场景:应用程序有两个默认的硬编码标签:label1&label2

在索引下。我们有果冻

<f:entry title="${%Label1}"
    field="label1">
    <f:textbox name="label1"
               value="${it.label1}"
               default=""/>
</f:entry>


<f:entry title="${%label2}"
    field="label2">
    <f:textbox name="label2"
               value="${it.label2}"
               default=""/>
</f:entry>

正如您所见,标签本身和值都是硬编码的

在Java类中,每个标签都有自己分配的变量:

private Integer label1;
private Integer label2;

    public Integer getlabel1() {
        return label1;
    }

    @DataBoundSetter
    public void setlabel1(Integer label1) {
        this.label1= label1;
    }

    public Integer getlabel2() {
        return label2;
    }

    @DataBoundSetter
    public void setlabel2(Integer label2) {
        this.label2= label2;
    }

请记住,这些值是通过反射持久化的(index.jelly中的label1字段与.java文件中的databoundsetter匹配)

假设我想添加无限多个标签,既然我不知道自己有多少个标签,就不能为每个标签创建setter,那么我怎么能持久化它们呢


共 (1) 个答案

  1. # 1 楼答案

    具有状态和行为的不可变对象:

       class Label {
    
            private final Integer label;
    
            Label(Integer label) {
                this.label = label;
            }
    
            public Label differentLabel(Integer label){
                return new Label(label);
            }
        }
    

    然后可以创建多个标签