六大设计原则 -- 3.依赖倒转原则

依赖倒转原则(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());
 

依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值