您能否检查以下代码是否正确?事实是,我在生产代码中找到了类似的东西,并且怀疑它是否符合开放/封闭原则。
public abstract class CustomClass {
private ClassThatSetEnvironmentProperty sysProp = new ClassThatSetEnvironmentProperty("SYS_PROPETY", "SYS_PROPERTY_VALUE");
// some code here
void setSysProp(ClassThatSetEnvironmentProperty sysProp) {
this.sysProp = sysProp;
}
}
我的理解是,设置方法仅用于单元测试(模拟
ClassThatSetEnvironmentProperty
)。但是在这种情况下,setter允许具体继承者更改定义的状态。在我看来,它违反了封装。此外,我认为这也违反了开放式/封闭式原理。坦白说,我的一些同事持相反的观点。我确实没有太多经验,所以我很难认出它。请在这里分享您的意见。谢谢。 最佳答案
这与开放式封闭原则没有直接关系,开放式封闭原则只是意味着要将新的行为添加到系统中,您应该创建一个新的实现类,而不是更改旧的实现类。为此,可以使用抽象类。
确实违反封装(这是不同原理)的一件事是可访问程序包的依赖项设置程序。您可以通过将其更改为受保护的设置程序来解决该问题。然后扩展类可以设置自己的类,但是外部调用者无法更改对象的状态。
protected final void setSysProp(ClassThatSetEnvironmentProperty sysProp) {
this.sysProp = sysProp;
}