软件设计原则

发布时间:2023年12月25日

软件设计原则重要两点

开闭原则(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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。