gpt4 book ai didi

java - 开闭原则和违反封装性

转载 作者:行者123 更新时间:2023-12-01 16:51:17 25 4
gpt4 key购买 nike

请您检查一下下面的代码是否正确?事实上,我在生产代码中发现了类似的东西,我怀疑它是否符合开闭原则。

public abstract class CustomClass {

private ClassThatSetEnvironmentProperty sysProp = new ClassThatSetEnvironmentProperty("SYS_PROPETY", "SYS_PROPERTY_VALUE");

// some code here

void setSysProp(ClassThatSetEnvironmentProperty sysProp) {
this.sysProp = sysProp;
}
}

我的理解是 setter 仅为单元测试可能性而定义(以模拟ClassThatSetEnvironmentProperty)。但在这种情况下,setter 允许具体的继承者更改定义的状态。从我的角度来看,它违反了封装性。而且我认为这也违反了开放/封闭原则。坦率地说,我的一些同事持相反的观点。我真的没有太多经验,所以我很难认识到它。请在这里分享您的意见。谢谢。

最佳答案

这与开闭原则没有直接关系,开闭原则只是意味着要向系统添加新行为,您应该创建一个新的实现类,而不是更改旧的实现类。使用抽象类就可以了。

确实违反封装(这是一个不同的原则)的一件事是包可访问的依赖项 setter 。您可以通过将其更改为 protected setter 来解决该问题。然后扩展类可以设置自己的状态,但外部调用者无法更改对象的状态。

protected final void setSysProp(ClassThatSetEnvironmentProperty sysProp) {
this.sysProp = sysProp;
}

关于java - 开闭原则和违反封装性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39623322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com