软件设计原则
2023-12-25 14:32:00
软件设计原则重要两点
开闭原则(Open-Closed Principle, OCP)
- 概念:指导我们编写易于扩展和修改的软件系统。软件开闭原则的核心思想是:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
- 原理:通过抽象和多态来实现的。通过定义抽象的接口和类,以及利用多态性,可以在不修改现有代码的情况下对系统进行扩展和修改,从而实现软件开闭原则。
- 使用场景
- 当需要添加新的功能时,不修改现有代码,只需添加新的类或模块。
- 当需要修改现有功能时,通过继承、接口实现等方式来扩展功能,而不是直接修改原有代码。
public interface Shape {
void draw();
}
// 矩形类
class Rectangle implements Shape {
public void draw() {
System.out.println("绘制矩形");
}
}
// 圆形类
class Circle implements Shape {
public void draw() {
System.out.println("绘制圆形");
}
}
// 椭圆类
class Ellipse implements Shape {
public void draw() {
System.out.println("绘制椭圆");
}
}
// 图形绘制程序
class ShapeDrawer {
private final List<Shape> shapes = new ArrayList<>();
private void addShape(Shape shape) {
shapes.add(shape);
}
private void drawAllShapes() {
for (Shape shape : shapes) {
shape.draw();
}
}
public static void main(String[] args) {
ShapeDrawer shapeDrawer = new ShapeDrawer();
Shape shape = new Ellipse();
shapeDrawer.addShape(shape);
shapeDrawer.drawAllShapes();
}
}
上述代码例子中按照遵循软件开闭原则。当需要增加新的图形类型时,只需编写新的实现了Shape接口的类,而不需要修改原有的ShapeDrawer类。这样,我们就实现了对扩展开放,对修改关闭的设计。
依赖倒置原则(Dependence Inversion Principle,DIP)
- 概念及设计思想:高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。
- 原理:依赖倒置原则通过引入抽象来解耦模块之间的直接依赖关系,从而降低模块之间的耦合度。高层模块通过抽象接口来与低层模块通信,而具体的实现细节则由低层模块来实现。这样一来,模块之间的依赖关系更加灵活,可以更容易地进行扩展和替换。
- 使用场景:
- 当需要实现模块之间的松耦合,降低模块间的直接依赖关系,可以使用依赖倒置原则。
public interface ICourse {
void study();
}
class AICourse implements ICourse {
@Override
public void study() {
System.out.println("学习AI课程");
}
}
class JavaCourse implements ICourse {
@Override
public void study() {
System.out.println("学习Java课程");
}
}
class PythonCourse implements ICourse {
@Override
public void study() {
System.out.println("学习Python课程");
}
}
class Tom {
private ICourse course;
public void setCourse(ICourse course) {
this.course = course;
}
public void study() {
course.study();
}
}
class Test {
public static void main(String[] args) {
Tom tom = new Tom();
tom.setCourse(new JavaCourse());
tom.study();
tom.setCourse(new PythonCourse());
tom.study();
tom.setCourse(new AICourse());
tom.study();
}
}
文章来源:https://blog.csdn.net/weixin_45087693/article/details/135123266
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!