<?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();