首頁  >  文章  >  後端開發  >  php工廠方法模式問題

php工廠方法模式問題

coldplay.xixi
coldplay.xixi原創
2020-08-03 11:17:112198瀏覽

php工廠方法模式:1、工廠方法就是為配一個產品提供一個獨立的工廠類,透過不同的工廠實例來創建不同的產品實例;2、擁有良好的封裝性,程式碼結構清晰,擁有良好的擴展性,屏蔽產品類。

php工廠方法模式問題

php工廠方法模式:

#一、什麼是工廠方法模式

#工廠方法就是為配一個產品提供一個獨立的工廠類,透過不同的工廠實例來創建不同的產品實例。

二、 工廠方法模式的優點

有良好的封裝性,程式碼結構清晰。 對於每一個物件的建立都是有條件約束的。如:呼叫一個具體的產品對象,只需要知道這個產品的類別名稱和約束參數就可以了,不用知道創建對象本身的複雜過程。降低模組之間的耦合度。

有良好的擴展性,新增一個產品類,只需要適當的增加工廠類或擴展一個工廠類,如下面的例子中,當需要增加一個資料庫Oracle的操作,只需要增加一個Oracle類,工廠類不用修改任務就可完成系統擴展。

屏蔽產品類別。 這個特點非常重要,產品類別的實作如何變化,呼叫者都不需要關心,它只需要關心產品的接口,只要接口保持不變,系統中的上層模組就不要改變。

三、使用場景

支付寶、微信、銀聯的連接方式(connectMode),支付方式(payMode)。使用工廠模式,「客戶」就不需要知道特定的連線方式和付款方式了, 只需要呼叫connectMode 和 payMode即可。

MySQLSQL ServerOracle等資料庫的連線方式(connectMode)、查詢方式(selectMode)等作業可以使用工廠模式進行封裝。

接下來看具體的案例:

產品類別:

    //抽象产品类
    abstract class DataBase
    {
        abstract function connect();
        abstract function getOne();
    }
    
  //具体产品类
    class MySql extends DataBase
    {
        function connect()
        {
            return "MySQL连接对象返回";
        }
    
        function getOne()
        {
            return "MySQL返回查询结果";
        }
    }
    
  //具体产品类
    class SqlServer extends DataBase
    {
        function connect()
        {
            return "SQL Server连接对象返回";
        }
    
        function getOne()
        {
            return "SQL Server返回查询结果";
        }
    }

工廠類別:

//抽象工厂类
    abstract class FactoryDataBase{
        function createDataBase(){}
    }
    
  //具体工厂类
    class FactoryMySql extends FactoryDataBase
    {
        public function createDataBase()
        {
            return new MySql();
        }
    }
    
  //具体工厂类
    class FactorySqlServer extends FactoryDataBase
    {
        public function createDataBase()
        {
            return new SqlServer();
        }
    }

客戶:

 $mysql = new FactoryMySql();
 $db1 = $mysql->createDataBase();

四、工廠方法模式的組成

  • 抽象工廠角色:這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實作的介面或是必須繼承的父類別。

  • 具體工廠角色:它含有和具體業務邏輯相關的程式碼。由應用程式呼叫以建立對應的特定產品的物件。

  • 抽象產品角色:它是特定產品繼承的父類別或是實作的介面。

  • 具體產品角色:特定工廠角色所建立的物件就是此角色的實例。

工廠方法模式彷彿已經把物件的創建進行了很完美的包裝,使得客戶程式中僅處理抽象產品角色提供的介面。那我們是否一定要在程式碼中遍布工廠呢?大可不必。也許在下面情況下你可以考慮使用工廠方法模式:

  • 當客戶程式不需要知道要使用物件的建立過程。

  • 客戶程式所使用的物件存在變動的可能,或者根本就不知道要使用哪一個特定的物件。

相關學習推薦:PHP程式設計從入門到精通

以上是php工廠方法模式問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn