<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>

                >適配器模式(Adapter Pattern):將某個對象的接口適配為另一個對象所期望的接口。屬于結構型設計模式。 ## (一)為什么需要適配器模式 1,某個操作數據庫的有兩套不同的數據庫操作方法,我們通過適配器統一成一個接口。例如,我們待會把mysql和mysqli統一成一個接口。 2,我們有多套數據庫對應了多種數據庫操作,例如MySQL,SqlServer,Oralce,Redis都有對應的操作函數,或操作類。PDO把這些都統一成一個接口。 3,系統的增加一些新功能,創建了一個新的接口,但是老的接口并不想廢棄。可以使用適配器模式,對用戶隱藏這兩個接口,提供用戶所希望的接口。 ## (二)適配器UML圖 ![](https://box.kancloud.cn/c6da29e353183f5353926ffbb288b274_607x295.png) ## (三)設計實例 把MySQL和mysqli統一成一個接口,用戶可以調用同樣的方法使用MySQL和mysqli操作數據庫。 <?php //MySQL待操作適配類 class MySQLAdaptee implements Target { protected $conn; //用于存放數據庫連接句柄 //實現連接方法 public function connect($host, $user, $passwd, $dbname) { $conn = mysql_connect($host, $user, $passwd); mysql_select_db($dbname, $conn); $this->conn = $conn; } //查詢方法 public function query($sql) { $res = mysql_query($sql, $this->conn); return $res; } //關閉方法 public function close() { mysql_close($this->conn); } } //MySQLi操作待適配類 class MySQLiAdaptee { protected $conn; public function connect($host, $user, $passwd, $dbname) { $conn = mysqli_connect($host, $user, $passwd, $dbname); $this->conn = $conn; } public function query($sql) { return mysqli_query($this->conn, $sql); } public function close() { mysqli_close($this->conn); } } //用戶所期待的接口 Interface Target{ public function connect($host, $user, $passwd, $dbname); public function query($sql); public function close(); } //用戶期待適配類 Class DataBase implements Target { protected $db ; //存放MySQLiAdapter對象或MySQLAdapter對象 public function __construct($type){ $type = $type."Adapter" ; $this->db = new $type ; } public function connect($host, $user, $passwd, $dbname){ $this->db->connect($host, $user, $passwd, $dbname); } public function query($sql){ return $this->db->query($sql); } public function close(){ $this->db->close(); } } //用戶調用同一個接口,使用MySQL和mysqli這兩套不同示例。 $db1 = new DataBase('MySQL'); $db1->connect('127.0.0.1','root','1234','myDB');die; $db1->query('select * from test'); $db1->close(); $db2 = new DataBase('MySQLi'); $db2->connect('127.0.0.1','root','1234','myDB'); $db2->query('select * from test'); $db2->close(); 上面的代碼只是一個示例,如果你運行以上的代碼報了mysql函數不存在或是被廢棄的錯誤。這是正常的,因為MySQL這套函數在PHP5.5以上的版本已經被廢棄了。感興趣的還可以去了解一下PDO的實現。 通過上面的代碼,我們可以看到,使用適配器可以把不同的操作接口封裝起來,對外顯示成用戶所期望的接口。 這就好比你家墻上有一個電源三相插孔,但是插孔的孔距之間太小。你的電器三相插頭插腳距太大的插不進去,或許你還有個兩相的插頭,或許你還有條USB線和type-C線,這些都沒法插到三相接口里。于是你買了個插腳適合插到你墻上的排插,然后這個排插是這些年新出的,USB也能插。于是你把你的三相插頭,兩相插頭,USB線,type-c線都插到排插上。實際上就是間接地連在了你墻壁上的三相插孔上。 沒錯,適配器要做的就是這么回事。 >有些書也把適配器模式分為:類的適配器模式,對象的適配器模式,接口的適配器模式
                  <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>

                              哎呀哎呀视频在线观看