开闭原则的简单总结
简介
开闭原则指的是软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着:
- 对扩展开放:当需要新增功能时,可以通过添加新的代码来实现,而不是修改现有代码。
- 对修改关闭:已经存在的、经过测试的代码不应该被修改。
优缺点
优点:
- 提高代码的可维护性和复用性
- 降低引入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类不需要修改就可以处理新的形状类型。
原文地址:https://blog.csdn.net/toyijiu/article/details/140171379
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!