<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                **依賴倒轉原則**:抽象不依賴細節,面向接口編程,傳遞參數盡量引用層次高的類。 1、上層模塊不應該依賴底層模塊,它們都應該依賴于抽象(依賴接口或抽象類,不要依賴具體的子類)。 2、抽象不應該依賴于細節,細節應該依賴于抽象。 即需求一旦修改,不能修改上層父類接口抽象類,而是修改下層的子類代碼 ``` interface DBConnection { public function connect(); } class MySQLConnection implements DBConnection { public function connect() { // 連接 MySQL 數據庫的邏輯 } } class OracleConnection implements DBConnection { public function connect() { // 連接 Oracle 數據庫的邏輯 } } class UserManager { private $dbConnection; public function __construct(DBConnection $dbConnection) { $this->dbConnection = $dbConnection; } public function getUserById($userId) { $this->dbConnection->connect(); // 從數據庫中獲取用戶信息的邏輯 } } $mysqlConnection = new MySQLConnection(); $userManager = new UserManager($mysqlConnection); $userManager->getUserById(1); $oracleConnection = new OracleConnection(); $userManager = new UserManager($oracleConnection); $userManager->getUserById(2); ``` 在上面的示例中,我們有兩個數據庫連接類 `MySQLConnection` 和 `OracleConnection`,它們都實現了 `DBConnection` 接口。`UserManager` 類依賴于 `DBConnection` 接口而不是具體的數據庫連接實現,這樣就可以在不修改 `UserManager` 類的情況下更換不同的數據庫。 通過將依賴關系從具體實現改為抽象接口,我們提高了代碼的靈活性和可擴展性。如果我們需要添加一個新的數據庫連接類,只需要實現 `DBConnection` 接口即可,并且不會對 `UserManager` 類產生任何影響。 總之,依賴倒置原則要求高層模塊依賴于抽象接口,而不是具體實現。這樣可以減少模塊之間的耦合性,提高代碼的靈活性和可維護性。 ## **在依賴倒轉時,往往進行依賴關系傳遞,目前與三種 方式** ### **第一種就是接口傳遞** ``` class Person{ public function receive(Email $email){ echo $email.getInfo(); } } class Email{ public function getInfo(){ return "郵件消息內容"; } } $p=new Person(); $email=new Email(); $p->receive($email); // 如果我們將接受消息改為接受傳真,那么Person的receive方法參數則必須換成傳真類 class Fax{ public function getInfo(){ return "傳真消息內容"; } } class Person{ public function receive(Fax $fax){ echo $fax.getInfo(); } } $p=new Person(); $fax=new Fax(); $p->receive($fax); ``` 改進 ``` // 依賴倒置改進 class Person{ public function receive(IReceiver $email){ echo $email.getInfo(); } } interface IReceiver{ public function getInfo(); } class Email extends IReceiver{ public function getInfo(){ return "郵件消息內容"; } } class Fax extends IReceiver{ public function getInfo(){ return "傳真消息內容"; } } $p=new Person(); $email=new Email(); $p->receive($email); $p=new Person(); $fax=new Fax(); $p->receive($fax ``` ### **第二種:構造方法傳遞** ``` class Person{ public $IReceiver=""; public function __construct(IReceiver $email){ $this->IReceiver=$email; } public function receive(){ echo ($this->IReceiver)->getInfo(); } } interface IReceiver{ public function getInfo(); } class Email extends IReceiver{ public function getInfo(){ return "郵件消息內容"; } } class Fax extends IReceiver{ public function getInfo(){ return "傳真消息內容"; } } $email=new Email(); $p=new Person($email); $p->receive(); $fax=new Fax(); $p=new Person($fax); $p->receive(); ``` ### **第三種方法傳遞** ``` class Person{ public $IReceiver=""; public function setME(IReceiver $email){ $this->IReceiver=$email; } public function receive(){ echo ($this->IReceiver)->getInfo(); } } interface IReceiver{ public function getInfo(); } class Email extends IReceiver{ public function getInfo(){ return "郵件消息內容"; } } class Fax extends IReceiver{ public function getInfo(){ return "傳真消息內容"; } } $email=new Email(); $p=new Person(); $p->setME($email); $p->receive(); $fax=new Fax(); $p=new Person(); $p->setME($email); $p->receive(); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看