
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