> **设计模式-简单工厂模式**
## 说明 ##
**工厂模式是创建型模式的一种,分为简单工厂模式,工厂模式,抽象工厂模式,简单工厂可以称之为工厂模式的一个特例**
----------
##简单工厂##
简单工厂:将调用者和创建者分离,实现解耦,调用者直接向工厂请求,通过工厂去选择需要实例化的对象,用一个单独的类来做这个创建实例的过程。
![请输入图片描述][1]
<h5>服务端操作类</h5>
<?php
/**
* Interface db 链接数据库接口
*/
interface db{
function conn(); //连接方法
}
//服务端接口
/**
* Class dbMysql
*/
class dbMysql implements db {
public function conn(){
echo "连接上了Mysql";
}
}
/**
* Class dbSql
*/
class dbSql implements db{
public function conn(){
echo "连接上了sql";
}
}
<h5>工厂类</h5>
/**
* Class Factory
*/
class Factory{
public static function creatDB($type){
if($type == "mysql"){
return new dbMysql();
}elseif($type == 'sql'){
return new dbSql();
}else{
throw new Exception("没有该类型数据库");
}
}
}
$objSql=Factory::creatDB('mysql');
$objSql->conn();
通过工厂类来控制连接不同的数据库,如果要新增一个oracle连接,直接创建一个dbOracle来继承db类,然后在工厂类中进行创建就好。
##工厂模式##
工厂模式:工厂模式是简单工厂的晋级版,在简单工厂模式下,如果需要新增一个类,需要更改工厂类代码,违反了封闭开放原则,而工厂模式则解决的这个问题。
![https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png][2]
<?php
/**
* Interface db 链接数据库接口
*/
interface db{
function conn(); //连接方法
}
//服务端接口
/**
* Class dbMysql
*/
class dbMysql implements db {
public function conn(){
echo "连接上了Mysql";
}
}
/**
* Class dbSql
*/
class dbSql implements db{
public function conn(){
echo "连接上了sql";
}
}
interface Factory{
function creatDB();
}
class MysqlFactory implements Factory {
function creatDB()
{
// TODO: Implement creatDB() method.
return new dbMysql();
}
}
class SqlFactory implements Factory{
/**
* @return mixed
*/
function creatDB()
{
// TODO: Implement creatDB() method.
return new dbSql();
}
}
$db=new MysqlFactory();
$objSql = $db->creatDB();
$objSql ->conn();
如果要新增连接方式,直接新增新增连接方式,新增工厂创建类就好。
## 结尾 ##
<p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;">
心如花木,向阳而生。
</p>
[1]: https://blog.zxliu.cn/usr/uploads/2020/11/386091710.png
[2]: https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png