說明
這個設計模式屬于建立型, 也是常用設計模式之一, 工廠模式分為: 簡單工廠、工廠方法、靜态工廠、抽象工廠
我們這篇主要介紹工廠方法模式, 工廠方法就是為了解決簡單工廠擴充性的問題,相信大家再看簡單工廠是也發現了其缺陷,以前簡單工廠要擴充的時候,需要修改工廠内容,這就違背了設計模式對外擴充開放,對内修改關閉原則
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5Gcu8WMjZGbzRnehVzLcVDO0YTNyczLcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
- 應用場景
- 當你不知道該使用對象的确切類型的時候 客戶程式使用的對象存在變動的可能,或者根本就不知道使用哪一個具體的對象。
- 當你希望為庫或者架構提供擴充其内部元件的方法時
- 主要優點
- 解耦
- 符合原則
- 主要組成
- 抽象工廠接口
- 工廠接口的實作
- 抽象産品
- 具體産品
示例
- 多種資料庫操作使用工廠方法實作
<?php
/**
* Created by 憧憬.
*/
/**
* 定義基礎資料庫操作
* Interface DataBase
*/
interface DataBase
{
function connect();
function first();
}
/**
* Mysql操作
* Class MySql
*/
class MySql implements DataBase
{
function connect()
{
return "MySQL連接配接對象傳回";
}
function first()
{
return "MySQL傳回查詢結果";
}
}
/**
* pgsql操作
* Class PgSqlServer
*/
class PgSqlServer implements DataBase
{
function connect()
{
return "Pgsql連接配接對象傳回";
}
function first()
{
return "Pgsql傳回查詢結果";
}
}
/**
* 聲明工廠限制
* Interface FactoryDataBase
*/
interface FactoryDataBase{
function createDataBase();
}
/**
* mysql工廠實作
* Class MySqlFactory
*/
class MySqlFactory implements FactoryDataBase
{
public function createDataBase()
{
return new MySql();
}
}
/**
* pgsql工廠實作
* Class SqlServerFactory
*/
class SqlServerFactory implements FactoryDataBase
{
public function createDataBase()
{
return new PgSqlServer();
}
}
/**
* 這樣做的話 對于增加新的連接配接沒有任何影響,用戶端無需感覺, 例如我多增加一個oracle資料庫的操作 使用者
* 不需要知道這個東西如何建立, 而我們隻需要聲明好接口即可
*/
$server = new MySqlFactory();
$db = $server->createDataBase();
複制