依赖倒转原则(DIP:dependence inversion principle)
定义:
1.高层不能依赖底层模块,两者都依赖其抽象
2.抽象不能依赖细节,细节依赖抽象
依赖倒转简单的讲就是实现对接口的编程,而不是对实现的编程。可以降低客户与实现模块的耦合。
代码示例:
一个人读书的代码:
class Book{
public function getContent(){
return '我正在读书';
}
}
class Person{
//这里person依赖读书的具体实现
public funciton read(Book $book){
echo $book->getContent();
}
}
//客户端调用读书
$personObj = new Person();
$bookObj = new Book();
echo $personObj->read($bookObj);
设想这时需求变了,这个人要读报了,我们发现这个人不会读报,所以不得不修改person类:
class Newspaper(){
public function getContent(){
return '我正在读报';
}
}
class Person{
//这里person依赖读书的具体实现
public funciton read(Newspaper $newspaper){
echo $newspaper->getContent();
}
}
$personObj = new Person();
//当需求改变时,客户端代码必须再次做出修改
$newspaperObj = new Newspaper();
echo $personObj->read($newspaperObj);
这时,我们修改person使其依赖一个抽象,而不是具体实现。
interface Ireader(){
public function getContent();
}
//实现类对接口继承
//person依赖抽象接口
class Person{
public funciton read(Ireader $reader){
echo $reader->getContent();
}
}
//客户端实现
$personObj = new Person();
//当需求改变时,客户端代码必须再次做出修改
echo $personObj->read(new Newspaper());
echo $personObj->read(new Book());
依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。