php設計模式-介面工廠模式
阿新 • • 發佈:2020-07-19
<?php //------------------------------簡單介面 // 共同介面 interface db { function conn(); } // 服務端開發不知道將會被誰呼叫 class mysql implements db { public function conn() { echo '連線mysql'; } } class sqlit implements db { public function conn() { echo '連線sqlit'; } } // 客戶端看不到mysql,sqlit內部細節,根據文件只清楚有兩個介面 $db = new mysql; $db->conn(); //連線mysql $db = new sqlit; $db->conn(); //連線sqlit // --------------------------簡單工廠 class Factory { public static function createDb($type) { return new $type; } } // 客戶端呼叫現在不知道有哪些類名,只知道介面支援mysql,sqlit, // 提供了Factory::createDb方法,只要傳資料庫名稱,就可以得到例項 $db = Factory::createDb('mysql'); $db->conn(); // 連線mysql /** * 新增oracle資料庫? * 在c++和java中修改程式碼要增加編譯的成本,不符合增開增開修閉原則 */ //----------------------------- 抽象工廠 interface dbFactory { public function createDb(); } class mysqlFactory implements dbFactory { public function createDb() { return new mysql(); } } class sqlitFactory implements dbFactory { public function createDb() { return new sqlit(); } } // 客戶端開始呼叫包 $mysqlFactory = new mysqlFactory(); $mysql = $mysqlFactory->createDb(); $mysql->conn(); $sqlitFactory = new sqlitFactory(); $sqlit = $sqlitFactory->createDb(); $sqlit->conn(); // 新增oracle只要新增oracle工產,和oracle資料庫類,避免對原有程式碼的修改 class oracle implements db { public function conn() { echo '連線oracle'; } } class oracleFactory implements dbFactory { public function createDb() { return new oracle; } } $oracleFactory = new oracleFactory(); $oracle = $oracleFactory->createDb(); $oracle->conn();