aim*_*ime 0 java open-closed-principle
您能否检查以下代码是否正确?事实是,我在推进代码中找到了类似的东西,我怀疑它是否与开放/封闭原则相匹配.
public abstract class CustomClass {
private ClassThatSetEnvironmentProperty sysProp = new ClassThatSetEnvironmentProperty("SYS_PROPETY", "SYS_PROPERTY_VALUE");
// some code here
void setSysProp(ClassThatSetEnvironmentProperty sysProp) {
this.sysProp = sysProp;
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是setter仅为单元测试可能性定义(模拟ClassThatSetEnvironmentProperty).但在这种情况下,setter允许具体的继承者改变定义的状态.从我的角度来看,它违反了封装.更多我认为它也违反了开放/封闭的原则.坦率地说,我的一些同事采取了相反的观点.我真的没有多少经验,所以我很难认识到它.请在这里分享您的意见.谢谢.
这与开放封闭原则没有直接关系,开放封闭原则只是意味着要在系统中添加新行为,您应该创建一个新的实现类而不是更改旧的实现类.使用抽象类就可以了.
确实违反封装(这是一个不同的原则)的一件事是包可访问的依赖设置器.您可以通过将其更改为受保护的setter来解决该问题.然后扩展类可以自己设置,但外部调用者不能更改对象的状态.
protected final void setSysProp(ClassThatSetEnvironmentProperty sysProp) {
this.sysProp = sysProp;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |