java-如何扩展违反开放式原则的应用程序

时间:2018-08-30 10:53:40

标签: java design-patterns architecture jelly

我正在尝试扩展用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>

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

在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匹配)。

假设我要添加无限数量的标签,由于我不知道有多少标签,因此无法为每个标签创建设置器,该如何保存标签?

1 个答案:

答案 0 :(得分:0)

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

   class Label {

        private final Integer label;

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

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

然后您可以创建多个标签