设计原则之依赖倒置原则

245 阅读1分钟

是指设计代码结构时,高层模块不应该依 赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。

很多刚开始学不知道高层模块和底层模块。 先看demo

public class Parkin {
    public void studyJavaCourse() {
        System.out.println("parkin正在学习JAVA");
    }

}

// 测试类
public class MainTest {
    public static void main(String[] args) {
        Parkin parkin = new Parkin();
        parkin.studyJavaCourse();
    }
}

这时候要想继续学习Python课程,难道我们又在Parkin类里加一个studyPython的方法吗,然后测试类再来调用,如果是这样,就违背了开闭原则。

这里的高层模块就是测试类,底层模块就是Parkin类,所以如果这样写,高层模块依赖与底层模块又违背了依赖倒置原则。

改进:

// 课程抽象
public interface ICourse {
    void study();
}

public class JavaCourse implements ICourse {
    @Override
    public void study() {
        System.out.println("学习JAVA");
    }
}

public class Parkin {
    public void studyCourse(ICourse course) {
        course.study();
    }

}

// 测试类
public class MainTest {
    public static void main(String[] args) {
        Parkin parkin = new Parkin();
        parkin.studyCourse(new JavaCourse());
    }
}

这时候如果想学习Python课程,只需增加类,不用修改代码了。

public class PythonCourse implements ICourse {
    @Override
    public void study() {
        System.out.println("学习Python");
    }
}

// 测试类

public class MainTest {
    public static void main(String[] args) {
        Parkin parkin = new Parkin();
        parkin.studyCourse(new JavaCourse());

        parkin.studyCourse(new PythonCourse());
    }
}

优点:

提高系统稳定性,提高代码可读性和可维护性,并能够降低修改程序所 造成的风险。

缺点:

可能导致类的膨胀

注意:所以一个系统应该先考虑整体再到细节,不要去考虑实现,面向抽象编程。