【问题标题】:How to implement Open-close principle in the below mentioned situation在下面提到的情况下如何实现开闭原则
【发布时间】:2018-12-02 06:17:13
【问题描述】:

我知道开放关闭原则是 SOLID 面向对象设计模式的一部分。我有一种情况,我有一个现有的 Employee POJO 类,它有 10 个字段,它的 getter 和 setter 方法,覆盖的 equals 和 hashcode 方法。我有一个新要求,要在这个旧的 Employee 类中再添加 5 个字段。只是想知道关于如何处理这种情况的意见?简单的方法是将新的 5 个字段添加到现有的员工类中,并添加它是 getter 和 setter,从而实现扩展功能。然而,开闭原则说你不应该触及现有代码并尝试通过扩展现有代码而不更改现有代码来创建新代码。

有人可以指导我,如何去做?

【问题讨论】:

  • 仅供参考,关于“只是想知道对此的看法”,请注意,寻求意见的问题在 Stack Overflow 上是明确无关的,此类问题是通常关闭。在这种特定情况下,您的问题的答案根本不是基于意见的,所以没关系,但请避免在问题中寻求意见。

标签: java design-patterns


【解决方案1】:

OCP 表示该类已关闭以进行修改并打开以进行扩展。所以你应该将这些额外的字段添加到子类中(即扩展基类)。

【讨论】:

    【解决方案2】:

    在查看开闭原则的维基百科页面时,我发现了 Bertrand Meyer 的这两条引述:

    如果模块仍可用于扩展,则该模块将被称为打开。例如,应该可以将字段添加到它包含的数据结构中,或者将新元素添加到它执行的功能集中。

    如果 [it] 可供其他模块使用,则称该模块已关闭。这假设该模块已被赋予定义明确、稳定的描述(信息隐藏意义上的接口)。

    使用这些规则,您的问题的答案是 Employee 类是否已在生产中使用。如果 Employee 类已经被生产中的其他类使用,那么它被认为是“关闭的”并且不可修改。如果 Employee 类没有被生产中的任何其他类使用,则认为它是“开放的”并且可以修改。

    来源:Wikipedia

    【讨论】:

    • 那是否意味着如果Employee类已经在生产环境中,那么我们应该创建一个新类并扩展Employee类并使用新类?如果它还没有投入生产,那么我们可以在同一个员工类中添加这些字段吗?
    • 是的。虽然如果你的类被用在一个巨大的内部代码库中,那么你可以考虑在生产环境中使用它。
    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2021-11-06
    • 2010-10-10
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多