依赖倒转原则
Dependence Inversion Priciple
基本介绍
- 高层模块不应该依赖低层模块,二者都应该依赖其抽象
- 抽象不应该依赖细节,细节应该依赖抽象
- 依赖倒转的中心思想是面向接口编程
- 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类
- 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成
细节
- 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
- 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层。利于程序扩展和优化
- 继承时遵循里氏替换原则
1通过接口传递实现依赖
interface IOpenAndClose{
//抽象方法
public void open(ITV tv);
}
interface ITV{
//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.通过构造方法依赖传递
interface IOpenAndClose{
//抽象方法
public void open(ITV tv);
}
interface ITV{
//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方法传递
interface IOpenAndClose{
//抽象方法
public void open(ITV tv);
public void name(ITV tv);
}
interface ITV{
//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();
}
}