6大设计原则(三)---依赖倒置原则
英文名称(Dependence Inversion Principle,DIP)定义:高层模块不应该依赖低层模块,应该依赖其抽象,抽象不应该依赖其细节,细节应该依赖其抽象。 这句话在java中的理解: 依赖:存在类A的一个方法S,S传入的参数是另一个类B的实例,那么类A依赖于类B我的理解---在项目开发中尽量将相同模块细化,类与类之间减少依赖关系,应该依赖其抽象类或者接口。 一个反面的例子:
public class DIPTest { public static void main(String[] args) { new Driver().drive(new BMW()); } } class Driver{ public void drive(BMW bmw){ System.out.println("司机开车..."); bmw.run(); } } class BMW{ public void run(){ System.out.println("宝马车开动了...."); } }更改需求,司机现在改开奔驰了,那么如果在这个类的基础上更改,我们需要给司机提供一个drive(Benz b)的方法。 同时再提供一个Benz类,提供一个run方法。那么就存在类之间的依赖性太大,不利于类的拓展。 ----解决方案:
package hpu.lzl.dip; public class DIPTest2 { public static void main(String[] args) { IDriver d = new Driver2(); ICar ic = new BenzCar(); d.Driver(ic); System.out.println("----------------"); d.Driver(new BMWCar()); } } interface IDriver{ public void Driver(ICar car); } interface ICar{ public void run(); } class Driver2 implements IDriver{ @Override public void Driver(ICar car) { System.out.println("司机开车....."); car.run(); } } class BMWCar implements ICar{ @Override public void run() { System.out.println("宝马车开动了...."); } } class BenzCar implements ICar{ @Override public void run() { System.out.println("奔驰车开动了...."); } }依赖的三种写法 1、构造函数传递依赖interface IDriver{ public void drive(); } class Driver2 implements IDriver{ private ICar car; public Driver2(ICar car){ this.car = car; } @Override public void drive() { System.out.println("司机发动车了..."); car.run(); } } 2、setter方法传递依赖interface IDriver{ public void drive(); public void setCar(ICar car); } class Driver2 implements IDriver{ private ICar car; @Override public void drive() { System.out.println("司机开车....."); car.run(); } @Override public void setCar(ICar car) { // TODO Auto-generated method stub this.car = car; } } 3、接口传递依赖interface IDriver{ public void drive(ICar car); } class Driver2 implements IDriver{ @Override public void drive(ICar car) { System.out.println("司机发动车了..."); car.run(); } } 我对依赖倒置的理解 依赖倒置首先要求类之间具有联系,将其联系抽象成接口或者抽象类,这样降低类之间的依赖。从而产生抽象类或接口之间的依赖,将具体事物时间的依赖转化成抽象接口的依赖。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |