设计模式-开放封闭原则(Open-Closed Principle)

开放封闭原则(Open-Closed Principle)

目录

  1. 由来
  2. 定义
  3. 多种主要用法及其代码示例
  4. 其他类似原则
  5. 详细区别
  6. 官方链接

1. 由来

开放封闭原则是由计算机科学家Bertrand Meyer在他的著作《面向对象软件构造》(Object-Oriented Software Construction)中首次提出的。这个原则是面向对象编程中的重要原则之一,也是SOLID设计原则的一部分。

2. 定义

开放封闭原则可以定义为:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。

简单来说,一段代码或者一个组件应该是可扩展的,而不需要修改已有的代码。通过扩展现有代码,我们可以增加新的功能或行为,而不会影响到已经稳定运行的代码。

3. 多种主要用法及其代码示例

开放封闭原则的应用主要体现在以下几个方面,下面是具体的用法和代码示例:

示例1:使用抽象类和接口

interface Shape {
    double getArea();
}

class Rectangle implements Shape {
    private double width;
    private double height;

    @Override
    public double getArea() {
        return width * height;
    }
}

class Circle implements Shape {
    private double radius;

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

在上述示例中,通过定义一个抽象的 Shape 接口,我们可以根据需要创建不同形状的类(如矩形和圆),并且它们都实现了 getArea() 方法。当需要新增其他形状时,只需创建新的类并实现 Shape 接口,而不需要修改已有的代码。

示例2:使用策略模式

interface PaymentStrategy {
    void pay(double amount);
}

class CreditCardPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        // 使用信用卡支付
    }
}

class PayPalPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        // 使用PayPal支付
    }
}

class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(double amount) {
        // 结账操作
        paymentStrategy.pay(amount);
    }
}

在上述示例中,ShoppingCart 类使用了策略模式来实现不同的支付方式。通过设置不同的支付策略,可以在不修改 ShoppingCart 类的情况下,支持新的支付方式。

4. 其他类似原则

开放封闭原则与其他面向对象设计原则相辅相成,常与以下原则共同应用:

  • 单一职责原则(Single Responsibility Principle)
  • 里氏替换原则(Liskov Substitution Principle)
  • 接口隔离原则(Interface Segregation Principle)
  • 依赖倒置原则(Dependency Inversion Principle)

这些原则共同促进代码的可维护性、灵活性和可扩展性。

5. 详细区别

开放封闭原则强调对扩展开放、对修改关闭,即通过扩展来实现变化。它与其他原则的区别如下:

  • 单一职责原则:单一职责原则强调一个类应该只有一个责任,而开放封闭原则关注于软件实体是否能够支持扩展。
  • 里氏替换原则:里氏替换原则强调子类型必须能够完全替代父类型,而开放封闭原则关注于软件实体是否能够对扩展开放。
  • 接口隔离原则:接口隔离原则强调客户端不应该依赖它不需要的接口,而开放封闭原则关注于软件实体是否能够支持扩展。
  • 依赖倒置原则:依赖倒置原则强调高层模块不应该依赖低层模块,二者都应该依赖抽象,而开放封闭原则关注于软件实体是否能够对扩展开放。

6. 官方链接

了解更多关于开放封闭原则的详细信息,请参考官方链接:

https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值