0
点赞
收藏
分享

微信扫一扫

java 开闭原则

alanwhy 2023-07-14 阅读 73

Java 开闭原则

开闭原则(Open-Closed Principle)是面向对象设计的一个重要原则之一,也是SOLID原则的其中之一。它由Bertrand Meyer于1988年首次提出。开闭原则的定义为:

"软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。"

简单来说,开闭原则要求我们在设计代码时,应该尽可能地通过扩展来添加新功能,而不是修改原有的代码。

为了更好地理解开闭原则,我们可以通过一个具体的例子来进行说明。假设有一个图形类(Shape),它有一个方法用于计算图形的面积。

public abstract class Shape {
    public abstract double calculateArea();
}

public class Rectangle extends Shape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double calculateArea() {
        return length * width;
    }
}

public class Circle extends Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

上面的代码定义了一个抽象类Shape和两个具体的子类RectangleCircle。每个子类都实现了calculateArea()方法来计算自己的面积。

现在,我们需要添加一个新的图形类Triangle,用于计算三角形的面积。按照开闭原则,我们应该通过扩展而不是修改现有的代码来实现这个功能。

下面是我们可以按照开闭原则进行扩展的代码:

public class Triangle extends Shape {
    private double base;
    private double height;

    public Triangle(double base, double height) {
        this.base = base;
        this.height = height;
    }

    @Override
    public double calculateArea() {
        return 0.5 * base * height;
    }
}

我们只需创建一个新的类Triangle,并让它继承自Shape类,并实现自己的calculateArea()方法即可。这样,我们就通过扩展的方式添加了新的功能,而不需要修改现有的代码。

在实际应用中,开闭原则可以帮助我们设计出更加灵活和可扩展的代码。当需要添加新的功能时,我们只需创建一个新的类,并让它继承自已有的类,然后实现自己的方法即可。这样做的好处是,不会影响到已经在使用的代码,从而降低了代码的风险。

除了继承,我们还可以通过接口来实现开闭原则。接口定义了一组方法的规范,我们可以通过实现接口来添加新的功能。下面是一个使用接口的例子:

public interface Shape {
    double calculateArea();
}

public class Rectangle implements Shape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double calculateArea() {
        return length * width;
    }
}

public class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

在上面的代码中,我们使用接口Shape来定义了calculateArea()方法的规范,然后让RectangleCircle类来实现这个接口。这样,我们可以通过实现新的类来添加新的功能,而不需要修改已有的代码。

总结一下,开闭原则是面向对象设计中的一个重要原则,它要求我们通过扩展而不是修改代码来添加新的功能。通过遵守开闭原则,我们可以设计出更加灵活和可扩展的代码。在实际应用中,可以通过继承和接口来实现开闭原则。

参考资料:

  • [Open–closed principle - Wikipedia](
举报

相关推荐

0 条评论