程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 面向對象之依賴倒置原則

面向對象之依賴倒置原則

編輯:PHP綜合

依賴倒置原則(Dependence Inversion Principle)

具體依賴抽象,上層依賴下層。假設B是較A低的模塊,但B需要使用到A的功能,這個時候,B不應當直接使用A中的具體類;而應當由B定義一抽象接口,並由A來實現這個抽象接口,B只使用這個抽象接口;這樣就達到了依賴倒置的目的,B也解除了對A的依賴,反過來是A依賴於B定義的抽象接口。通過上層模塊難以避免依賴下層模塊,假如B也直接依賴A的實現,那麼就可能造成循環依賴。

采用依賴倒置原則可以減少類間的耦合性,提高系統的穩定性,減少並行開發引起的風險,提高代碼的可讀性和可維護性。

 

一段代碼了解

<?php
 
// 司機開奔馳,未用依賴倒置原則的寫法
 
 
class Benz{
 
    public function run(){
     
        return " Benz is runing!!!";
    }
}
 
class Driver{
 
    public function drive(Benz $car){
     
        echo $car -> run();
    }
}
 
class Client{
     
    public static function doing(){
     
        $driver = new Driver();
 
        $driver -> drive( new Benz() );
    }
 
}
 
Client :: doing();
 
// 那麼如果司機想開寶馬呢?,是不是就要修改Driver了,這就違反了開閉原則了,怎麼能只在Client添加代碼就讓寶馬車也會開呢?
 
interface ICar{
     
    //定義一個汽車接口
    public function run();
}
 
class BMW implements ICar{
 
    public function run(){
     
        return "BMW is runing !!!";
    }
}
 
class Benz implements ICar{
 
    public function run(){
     
        return "Benz is runing !!!";
    }
 
}
 
interface IDriver{
     
    //定義一個司機接口,以防以後有A照,B照,C照的
    public function drive(ICar $car);
}
 
class Driver implements IDriver{
 
    public function drive(ICar $car){
     
        echo "<br>" . $car -> run();
    }
 
}
 
 
class Client{
 
    public static function doing(){
     
        $driver = new Driver();
 
        $driver -> drive( new BMW() ); //開寶馬
 
        $driver -> drive( new Benz() ); //開奔馳
            .
            .
            .
            .
    }
 
}
 
Client :: doing();
 
?>

依賴倒置原則核心一句話:面向接口編程。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved