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