高层模块不应该依赖底层模块,二者都应该依赖其抽象
抽象不应该依赖细节;细节应该依赖抽象
针对接口编程,不要针对实现编程
这么做的优点是:可以减少类间的耦合性、提高系统的稳定性,提高代码的可读性和可维护性,可降低修改程序所照成的风险;
申明两个课程类(javaCourse,PythonCourse)底层模块,定义一个接口(ICourse),定义一个调用(Anndy)高层模块,最后通过Action.main 执行查看运行效果;
最后通过类图可以看出,调用类(Anndy)并没有直接和实现类有连线,所有的操作都是基于接口来调用。实现类的具体细节发生变化不会影响到调用方的改变。
通过Action.mian的运行可以看出,执行的两种方式分别是通过,构造器的注入和set注入两种方式,这也是spring常用的调用方式;
程序示例: