public class Driver { public void driver(Benz benz) { benz.run(); } }奔驰类:
public class Benz { public void run() { System.out.printIn("奔驰运行"); } }场景类:
public class Client { public static void main(String[] args) { Driver zhangSan = new Driver(); Benz benz = new Benz(); zhangSan.driver(benz); } }Now 张三要开宝马怎么办???
public interface IDriver { public void driver(ICar car); }司机实现类:
public class Driver implements IDriver { public void driver(ICar car) { car.run(); } }汽车接口:
public interface ICar { public void run(); }汽车实现:
public class Benz implements ICar { public void run() {//输出奔驰运行 } } public class BMW implements ICar { public void run() {//输出宝马运行 } }在业务场景中:”抽象不应依赖细节“
public class Client { public static void main(String[] args) { IDriver zhangSan = new Driver(); ICar benz = new Benz(); zhangSan.driver(benz); } }Client是高层业务逻辑,对低层模块的依赖建立在抽象上。zhangSan都是以IDrvier类型进行操作,屏蔽了细节对抽象的影响。
public class Client { public static void main(String[] args) { IDriver zhangSan = new Driver(); ICar bmw = new BMW(); zhangSan.driver(bmw); } }在新增加低层模块时,只修改了业务场景类,也就是高层模块,对其他低层模块不需修改。
public interface IDriver { public void driver(ICar car); } public class Driver implements IDriver { private ICar car; public Driver(ICar _Car) { this.car = _Car; } public void driver(ICar car) { this.car.run(); } }2. Setter方法传递依赖对象
public interface IDriver { public void setCar(ICar car); public void driver(); } public class Driver implements IDriver { private ICar car; public void setCar(ICar _Car) { this.car = _Car; } public void driver(ICar car) { this.car.run(); } }3. 接口声明依赖对象:接口注入
设计模式学习之——六大设计原则之三:依赖倒置原则,布布扣,bubuko.com
原文:http://blog.csdn.net/fu222cs98/article/details/21351051