如何实现开闭原则?

问题描述

我有2个课程:

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/,但是在这代码中,如果我想添加一个类“ bird”,则不会影响原始代码。因此,我认为这段代码没有违反“开闭”原则。

解决方法

您可以阅读another article,然后了解开放封闭原则

,

开放式封闭原则建议我们不要在现有类中进行更改,否则请使该类可扩展。

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

在上面提供的代码中,我没有看到违反开放式封闭原则的情况,因为每个类都有自己的功能,例如get_server(vm) talk()。>

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

您可以阅读有关S.O.L.I.D.的文章。原则here。它包含简化的说明以及违反和正确的示例。