<?php /** * 【工厂方法】 * 之前 03.php 简单工厂,如果再增加一个oracle客户端,就需要再次修改服务端Factory的代码。 * 在面向对象设计法则中,有一个重要的【开闭原则】———— 对于修改是封闭,对于扩展是开放的 * */ header("Content-type: text/html; charset=utf-8"); /*共同接口--连接数据库*/ interface db{ function conn(); } //工厂接口--创建数据库 interface Factory{ function createDB(); } /*服务端开发,面向上面的接口。(不知道将会被谁调用)*/ class dbmysql implements db{ public function conn(){ echo '04-连接上了mysql <br>'; } } class dbsqlite implements db{ public function conn(){ echo '04-连接上了sqlite <br>'; } } //定义多个工厂类,分别实现上面的工厂接口 class mysqlFactory implements Factory{ public function createDB(){ $db = new dbmysql(); return $db->conn(); } } class sqliteFactory implements Factory{ public function createDB(){ $db = new dbsqlite(); return $db->conn(); } } /* 客户端开发 */ $fact = new mysqlFactory(); $fact->createDB(); $fact = new sqliteFactory(); $fact->createDB(); ////==== 假如现在新增 oracle的相关数据(前面的代码不用改): class dboracle implements db{ public function conn(){ echo '04-连接上了oracle'; } } class oracleFactory implements Factory{ public function createDB(){ $db = new dboracle(); return $db->conn(); } } //客户端调用 $fact = new oracleFactory(); $fact->createDB(); //输出“04-连接上了oracle”