开闭原则的简单总结

简介

开闭原则指的是软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着:

  • 对扩展开放:当需要新增功能时,可以通过添加新的代码来实现,而不是修改现有代码。
  • 对修改关闭:已经存在的、经过测试的代码不应该被修改。

优缺点

优点:

  • 提高代码的可维护性和复用性
  • 降低引入bug的风险
  • 使系统更容易扩展

缺点:

  • 可能导致系统设计变得更复杂
  • 在某些情况下可能会引入额外的抽象层,影响性能

开闭原则代码demo

#include <iostream>
#include <vector>

// 抽象基类
class Shape {
public:
    virtual double area() const = 0;
    virtual ~Shape() = default;
};

// 具体类:圆形
class Circle : public Shape {
private:
    double radius;
public:
    Circle(double r) : radius(r) {}
    double area() const override {
        return 3.14159 * radius * radius;
    }
};

// 具体类:矩形
class Rectangle : public Shape {
private:
    double width, height;
public:
    Rectangle(double w, double h) : width(w), height(h) {}
    double area() const override {
        return width * height;
    }
};

// 计算器类
class AreaCalculator {
public:
    double totalArea(const std::vector<Shape*>& shapes) {
        double total = 0;
        for (const auto& shape : shapes) {
            total += shape->area();
        }
        return total;
    }
};

int main() {
    std::vector<Shape*> shapes;
    shapes.push_back(new Circle(5));
    shapes.push_back(new Rectangle(4, 6));

    AreaCalculator calculator;
    std::cout << "Total area: " << calculator.totalArea(shapes) << std::endl;

    // 清理内存
    for (auto shape : shapes) {
        delete shape;
    }

    return 0;
}
  • 定义一个抽象的Shape基类,它有一个纯虚函数area()。
  • 创建两个具体的形状类(Circle和Rectangle),它们继承自Shape并实现了area()方法。
  • AreaCalculator类可以计算任何Shape对象的面积,而不需要知道具体的形状类型。
  • 如果想添加新的形状(比如三角形),我们只需要创建一个新的类继承自Shape并实现area()方法,而不需要修改AreaCalculator或其他现有的代码。
  • 这个设计体现了开闭原则:
    • 对扩展开放:我们可以轻松地添加新的形状类型。
    • 对修改关闭:AreaCalculator类不需要修改就可以处理新的形状类型。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值