如何在使用setter方法时避免冗余代码

时间:2018-04-11 05:03:23

标签: java design-patterns

我有一个实例,我需要更新字段并将实例传递给另一个方法。

我要更新实例的10个以上字段(使用mutator / setter方法)。

在每种情况下更新字段,我使用instancevariable.setXXXX()方式......

有没有更好的方法来避免冗余,就像我每次使用instancevariable.setXXX一样?我不是班级的老板,我的方法类似于

 public AClass method1(AClass instance) {
    instance.setField1(value);
    instance.setField2(value);
    .
    .
    .
    instance.setField10(value);
    return instance;
    }

1 个答案:

答案 0 :(得分:1)

假设您不是类AClass的所有者,最好在单独的类中提取所有用于设置参数的逻辑。以下是一些示例,具体取决于您获取参数value的位置:

值每次都不同

public static class AClassInitializer {
    private final AClass pattern;
    private String value1;
    private String value2;

    private AClassInitializer(AClass pattern) {
        this.pattern = pattern;
    }

    public AClassInitializer field1(String value1) {
        this.value1 = value1;
        return this;
    }

    public AClassInitializer field2(String value2) {
        this.value2 = value2;
        return this;
    }

    public AClass init() {
        pattern.setField1(value1);
        pattern.setField2(value2);
        return pattern;
    }
}

public AClass method1(AClass instance) {
    return new AClassInitializer(instance).field1(value1).field2(value2).init();
}

每次的值都相同

public static class AClassInitializer {
    private final String value1;
    private final String value2;

    public AClassInitializer(String value1, String value2) {
        this.value1 = value1;
        this.value2 = value2;
    }

    public AClass init(AClass pattern) {
        pattern.setField1(value1);
        pattern.setField2(value2);
        return pattern;
    }
}

AClassInitializer aClassInitializer = new AClassInitializer(value1, value2);

public AClass method1(AClass instance) {
    return aClassInitializer.init(instance);
}