//共同接口
interface db{
function conn();
}
//服务器端开发(不知道将会被谁调用)
class dbmysql implements db{
public function conn(){
echo ‘连上了Mysql’;
}
}
//服务端面向接口
class dbsqlite implements db{
public function conn(){
//小型数据库
echo ‘连上了dbsqlite’;
}
}
//==客户端,看不到dbmysql ,dbsqlite 的内容细节的。
//只知道,上两个类
//
d
b
=
n
e
w
d
b
m
y
s
q
l
(
)
;
/
/
db=new dbmysql(); //
db=newdbmysql();//db->conn();
//简单工厂模式
class Factory{
public static function createDB(KaTeX parse error: Expected '}', got 'EOF' at end of input: …e){ if(type==‘mysql’){
return new dbmysql();
}else if($type==‘sqlite’){
return new dbsqlite();
}else{
throw new Exception(“Error db type”,1);
}
}
}
//==客户端现在不知道服务端到底有哪些类命,
//只知道对方开放了Factory::createDB方法
//方法允许传递数据库名称
$mysql=Factory::createDB(‘mysql’);
$mysql->conn();
$mysql=Factory::createDB(‘sqlite’);
$mysql->conn();
//如果新增oracle类型
//服务端要修改Factory的内容(在java,c++中,改后还得在编译)
//面对对象设计法则中,重要的开闭原则-----对于修改是封闭,对于扩展是开放的。
此模式违背啦开闭原则(下面会有工厂模式)