天天看點

設計模式 | 工廠方法模式

說明

這個設計模式屬于建立型, 也是常用設計模式之一, 工廠模式分為: 簡單工廠、工廠方法、靜态工廠、抽象工廠

我們這篇主要介紹工廠方法模式, 工廠方法就是為了解決簡單工廠擴充性的問題,相信大家再看簡單工廠是也發現了其缺陷,以前簡單工廠要擴充的時候,需要修改工廠内容,這就違背了設計模式對外擴充開放,對内修改關閉原則

設計模式 | 工廠方法模式
  • 應用場景
  1. 當你不知道該使用對象的确切類型的時候 客戶程式使用的對象存在變動的可能,或者根本就不知道使用哪一個具體的對象。
  2. 當你希望為庫或者架構提供擴充其内部元件的方法時
  • 主要優點
  1. 解耦
  2. 符合原則
  • 主要組成
  1. 抽象工廠接口
  2. 工廠接口的實作
  3. 抽象産品
  4. 具體産品

示例

  • 多種資料庫操作使用工廠方法實作
<?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();           

複制