文章目录
一、依赖倒置原则简介
二、面向实现编程代码示例 ( 反面示例 )
1、顾客类
2、测试类
三、依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 )
1、顾客类
2、商品接口
3、冰箱商品
4、电视商品
5、测试类
四、依赖倒置原则代码示例 ( 推荐示例 | 使用构造函数注入 IGood 实现类 )
1、顾客类
2、商品接口
3、冰箱商品
4、电视商品
5、测试类
五、依赖倒置原则代码示例 ( 推荐示例 | 使用 Setter 方法注入 IGood 实现类 )
1、顾客类
2、商品接口
3、冰箱商品
4、电视商品
5、测试类
一、依赖倒置原则简介
依赖倒置原则 : 高层模块 不应该 依赖 低层模块 , 二者都应该 依赖其抽象 ;
抽象 不应该 依赖细节 , 细节应该依赖抽象 ;
针对接口编程 , 不要针对实现编程 ;
通过抽象 , 包括使用 接口 或 抽象类 , 使个各类或模块之间 彼此独立 , 互不影响 , 从而实现模块之间的 松耦合 , 降低模块间的耦合性 ;
使用依赖倒置原则时的注意点 :
每个类都 尽量 实现自接口 或 继承抽象类 ;
尽量 避免从具体的类派生 ;
尽量 不要覆盖基类方法 ;
依赖倒置原则的优点 : 减少类之间的 耦合性 , 提高系统 稳定性 , 提高 代码可读性 , 可维护性 , 可 降低修改程序所造成的风险 ;
二、面向实现编程代码示例 ( 反面示例 )
1、顾客类
package dependenceinversion; /** * 如果要增加一个新功能 , 就需要在该类中添加一个新方法 * 这就是面向实现编程 , 该实现类需要经常进行修改 * 扩展性很差 * * 应用层的函数 , 是依赖于底层实现的 , 由于没有实现接口 * 造成了应用层的测试类 , 直接依赖于本类 * 应用层的模块属于高层模块 * 本类属于低层模块 * 根据依赖倒置原则 , 高层次的模块是不应该依赖于低层次的模块的 */ public class Customer { public void buyFridge() { System.out.println("购买冰箱"); } public void buyTelevision() { System.out.println("购买电视"); } }
2、测试类
package dependenceinversion; public class Main { public static void main(String[] args) { Customer customer = new Customer(); customer.buyFridge(); customer.buyTelevision(); } }
执行结果 :
购买冰箱 购买电视
三、依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 )
1、顾客类
使用接口方法注入 IGood 实现类 ;
package dependenceinversion; public class Customer { /** * 接口方法注入 IGood 实现类 * 也可以使用构造函数 , 注入 IGood 实现类 * * 此处就是面向接口编程 * 如果添加了新的类 , 不需要修改本类 * 只需要添加新的接口实现类即可 * 面向接口编程 , 而不是面向本实现类 * 对于高层模块来说 , 具体传入的参数是什么参数 , * 交给高层模块选择 * * 本类 与 具体的 IGood 接口 实现 是解耦的 * 本类 与 应用层 客户端测试类 之间是解耦的 * * 如果在添加一个新商品 , 直接定义一个新的接口实现类即可 * * @param iGood */ public void buy(IGood iGood) { iGood.buy(); } }