java - 如何扩展违反开闭原则的应用

java - how to extend app that violates open-closed principle

我正在尝试扩展用 Jelly & Java 编写的 Web 应用程序的功能。

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

在 index.jelly 下我们有

<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>

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

在Javaclass中,每个标签都有自己的赋值变量:

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 文件中的数据绑定 setter 匹配)。

假设我想添加无限数量的标签,我无法为每个标签创建一个 setter,因为我不知道我有多少标签,我该如何保留它们?

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

   class Label {

        private final Integer label;

        Label(Integer label) {
            this.label = label;
        }

        public Label differentLabel(Integer label){
            return new Label(label);
        }
    }

然后你可以创建多个标签