> **設計模式-簡單工廠模式**
## 說明 ##
**工廠模式是創建型模式的一種,分為簡單工廠模式,工廠模式,抽象工廠模式,簡單工廠可以稱之為工廠模式的一個特例**
----------
##簡單工廠##
簡單工廠:將調用者和創建者分離,實現解耦,調用者直接向工廠請求,通過工廠去選擇需要實例化的對象,用一個單獨的類來做這個創建實例的過程。
![請輸入圖片描述][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