依赖倒转原则
Dependence Inversion Priciple
基本介绍
- 高层模块不应该依赖低层模块,二者都应该依赖其抽象
- 抽象不应该依赖细节,细节应该依赖抽象
- 依赖倒转的中心思想是面向接口编程
- 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类
- 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成
细节
- 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
- 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层。利于程序扩展和优化
- 继承时遵循里氏替换原则
1通过接口传递实现依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| interface IOpenAndClose{ public void open(ITV tv); } interface ITV{ public void play(); }
class Htc implements ITV{ @Override public void play() { System.out.println("htc电视机,打开"); } }
class OpenAndClose implements IOpenAndClose{ public void open(ITV tv){ tv.play(); } }
|
2.通过构造方法依赖传递
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| interface IOpenAndClose{ public void open(ITV tv); } interface ITV{ public void play(); }
class Htc implements ITV{ @Override public void play() { System.out.println("htc电视机,打开"); } }
class OpenAndClose implements IOpenAndClose{ public ITV tv; public OpenAndClose(ITV tv){ this.tv = tv; } public void open(){ tv.play(); } }
|
3.通过setter方法传递
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| interface IOpenAndClose{ public void open(ITV tv); public void name(ITV tv); } interface ITV{ public void play(); }
class Htc implements ITV{ @Override public void play() { System.out.println("htc电视机,打开"); } }
class OpenAndClose implements IOpenAndClose{ public ITV tv; public setTv(ITV tv){ this.tv = tv; } public void open(){ tv.play(); } }
|