如何实现开闭原则?

How to achieve open-closed principle?

我有 2 个 classes:

public class Dog{

    public void talk(){
        
         System.out.println("dog is talking");
    }

    public void eat(){
         
          System.out.println("dog is eating");
    }
}
public class Cat{

    public void talk(){
        
         System.out.println("cat is talking");
    }

    public void eat(){
         
          System.out.println("cat is eating");
    }
}

书上说这段代码违反了“开闭”原则,但是没有给我理由,给出的答案是我需要创建一个接口来实现那个原则(也没有解释对于那个答案)。

我找到这篇文章:http://joelabrahamsson.com/a-simple-example-of-the-openclosed-principle/,但是在这段代码中,如果我想再添加一个class“鸟”,它不会影响原来的代码。所以我认为这段代码并没有违反“开闭”原则。

你可以阅读another article,然后了解开闭原则

Open-Closed 原则建议我们不要对已有的class进行改动,否则请使class可扩展。

请注意,我们仍然可以进行更改,但更改应尽可能少。

在你上面提供的代码中,我没有看到任何违反Open-Closed原则的地方,因为每个class都有自己的功能,比如[=10] =] 和 eat().

但是,如果您继续使用没有任何抽象的代码(如接口或抽象 Class),您将很有可能违反 Liskov 替换原则依赖倒置原则.

您可以阅读我关于 S.O.L.I.D 的文章。原理here。它包含简化的解释以及违规和正确的示例。