php 工厂模式封装数据库,PHP设计模式之工厂模式
概念:
工廠設計模式提供獲取某個對象的新實例的一個接口,同時使調用代碼避免確定實際實例化基類步驟。 很多高級模式都是依賴于工廠模式。
好處:
PHP中能夠創建基于變量內容的類的新實例,減少主代碼流中的基于條件復雜性; 同時如果類發生改變不需要所有的地方進行修改,只需要在工廠中進行修改 (無論對象被修改或者添加其他對象,Factory對象調用方式仍讓是相同的)
注意重點: 工廠模式簡單可以理解為,把new一個對象的寫法,寫成調用靜態方法的方式去創建對象!或者更簡單說是封裝new,使用接口強制實現工廠接口方式,優點:靜態調用,方便改變子工廠類名,缺點:多次使用new,解決方案:可以結合單例模式進行單次調用
一、什么是工廠模式?
一個類通過本身的靜態方法來,實例化一個類并返回一個實例對象;
二、工廠模式特點?
類命名特點:nameFactory eg: class mysqlFactory{} 【這是為了規范,當然也去起其他任意名字】
靜態方法名稱:static public function factory($class_name){} 【靜態方法是類與外界的接口, 返回的是一個對象】
三、優點?
如果已經使用的類內部發生改變,哪不需要在所有的地方都改變,只需要在類工廠類里改變既可,
比如:連接數據庫,可以使用mysql 、mysqli、pdo,根據不同參數配置使用不同的數據庫操作類
四、應用場景
做支付接口的時候,未來可能對應不同的支付網關:支付寶、財付通、網銀在線等。
方便未來擴展,設計成工廠模式。定一個專門生產網關接口的工廠,抽象出來,
做成接口形式,讓所有的子類都要實現它的接口。
以后加一個支付方式,要使用哪一種支付方式,改變一下參數即可。
在為用戶注冊的時候,分為很多種角色的用戶。
比如冊用戶,匿名用戶、管理員用戶等。完全使用可以使用工廠的思想來實現,
代碼也容易維護,為每種角色可以生成操作的類等等。
系統對接多個不同類型的數據庫,mysql,oracle,sqlserver
/**
* 抽象工廠角色
*/
interface Creator {
public function factoryMethod();
}
/**
* 具體工廠角色A
*/
class ConcreteCreatorA implements Creator {
/**
* 工廠方法 返回具體 產品A
* @return ConcreteProductA
*/
public function factoryMethod() {
return new ConcreteProductA();
}
}
/**
* 具體工廠角色B
*/
class ConcreteCreatorB implements Creator {
/**
* 工廠方法 返回具體 產品B
* @return ConcreteProductB
*/
public function factoryMethod() {
return new ConcreteProductB();
}
}
/**
* 抽象產品角色(定義要子工廠實現的方法)
*/
interface Product {
public function operation();
}
/**
* 具體產品角色A
*/
class ConcreteProductA implements Product {
/**
* 接口方法實現 輸出特定字符串
*/
public function operation() {
echo 'ConcreteProductA
';
}
}
/**
* 具體產品角色B
*/
class ConcreteProductB implements Product {
/**
* 接口方法實現 輸出特定字符串
*/
public function operation() {
echo 'ConcreteProductB
';
}
}
class Client {
/**
* Main program.
*/
public static function main() {
$creatorA = new ConcreteCreatorA();
$productA = $creatorA->factoryMethod();
$productA->operation();
$creatorB = new ConcreteCreatorB();
$productB = $creatorB->factoryMethod();
$productB->operation();
}
}
Client::main();
?>
【工廠方法模式與簡單工廠模式】
工廠方法模式與簡單工廠模式再結構上的不同不是很明顯。
工廠方法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具體類上。
工廠方法模式之所以有一個別名叫多態性工廠模式是因為具體工廠類都有共同的接口,或者有共同的抽象父類。
當系統擴展需要添加新的產品對象時,僅僅需要添加一個具體對象以及一個具體工廠對象,原有工廠對象不需要進行任何修改,也不需要修改客戶端,很好的符合了”開放-封閉”原則。而簡單工廠模式在添加新產品對象后不得不修改工廠方法,擴展性不好。
工廠方法模式退化后可以演變成簡單工廠模式。
本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
總結
以上是生活随笔為你收集整理的php 工厂模式封装数据库,PHP设计模式之工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请简述php循环控制语句,PHP 循环控
- 下一篇: php中的unbuffered_row,