摘要:對于這個問題,接下來的工廠方法模式可以解決這個問題。二工廠方法模式的優點擁有良好的封裝性,代碼結構清晰。參考系列源地址系列目錄設計模式概述設計模式一簡單工廠模式設計模式二工廠方法模式設計模式三抽象工廠模式設計模式四單例模式
簡單工廠簡述:
簡單工廠模式實現了產品類的代碼跟客戶端代碼分離,但會有一個問題,優秀的代碼是符合“開閉原則”如果你要加一個C類產品,你就要修改工廠類里面的代碼,也就是說要增加條件語句如:switch---case。對于這個問題,接下來的工廠方法模式可以解決這個問題。
一、 什么是工廠方法模式工廠方法就是為配一個產品提供一個獨立的工廠類,通過不同的工廠實例來創建不同的產品實例。
二、 工廠方法模式的優點擁有良好的封裝性,代碼結構清晰。對于每一個對象的創建都是有條件約束的。如:調用一個具體的產品對象,只需要知道這個產品的類名和約束參數就可以了,不用知道創建對象自身的復雜過程。降低模塊之間的耦合度。
擁有良好的擴展性,新增一個產品類,只需要適當的增加工廠類或者擴展一個工廠類,如下面的例子中,當需要增加一個數據庫Oracle的操作,則只需要增加一個Oracle類,工廠類不用修改任務就可完成系統擴展。
屏蔽產品類。這一特點非常重要,產品類的實現如何變化,調用者都不需要關心,它只需要關心產品的接口,只要接口保持不變,系統中的上層模塊就不要發生變化。
三、使用場景支付寶、微信、銀聯的連接方式(connectMode),支付方式(payMode)。 使用工廠模式,“客戶”就不需要要知道具體的連接方式和支付方式了, 只需要調用connectMode 和 payMode即可。
MySQL、SQL Server、Oracle等數據庫的連接方式(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();四、工廠方法模式的組成
抽象工廠角色:這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。
具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。
抽象產品角色:它是具體產品繼承的父類或者是實現的接口。
具體產品角色:具體工廠角色所創建的對象就是此角色的實例。
工廠方法模式仿佛已經把對象的創建進行了很完美的包裝,使得客戶程序中僅僅處理抽象產品角色提供的接口。那我們是否一定要在代碼中遍布工廠呢?大可不必。也許在下面情況下你可以考慮使用工廠方法模式:
當客戶程序不需要知道要使用對象的創建過程。
客戶程序使用的對象存在變動的可能,或者根本就不知道使用哪一個具體的對象。
參考 系列源地址WilburXu/design_pattern
系列目錄PHP 設計模式概述
PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)
PHP設計模式(二)工廠方法模式(Factory Method)
PHP設計模式(三)抽象工廠模式(Abstract Factory)
PHP設計模式(四)單例模式(Singleton)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29516.html
摘要:創建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設計模式(Design pattern)是什么 設計模式是一套被反復使用、多數人知曉、經過分類編目的代碼設計的經驗總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設計模式 在軟件開發過...
摘要:工廠模式使一個類的實例化延遲到其子類。參考系列源地址系列目錄設計模式概述設計模式一簡單工廠模式設計模式二工廠方法模式設計模式三抽象工廠模式設計模式四單例模式 一、什么是簡單工廠模式 簡單工廠 (Simple Factory)又稱靜態工廠方法模式(Static Factory Method Pattern) 使用的頻率可以說是非常之高,它的官方解釋為:定義一個用于創建對象的接口,讓子...
摘要:支持增加任意產品抽象工廠用來生產不同產品族的全部產品。對于增加新的產品,無能為力支持增加產品族參考系列源地址系列目錄設計模式概述設計模式一簡單工廠模式設計模式二工廠方法模式設計模式三抽象工廠模式設計模式四單例模式 一、什么是抽象工廠模式 抽象工廠模式的用意為:給客戶端提供一個接口,可以創建多個產品族中的產品對象 ,而且使用抽象工廠模式還要滿足以下條件: 系統中有多個產品族,而系統一次...
摘要:一什么是單例設計模式單例模式,也叫單子模式,是一種常用的軟件設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。 一、什么是單例設計模式 單例模式,也叫單子模式,是一種常用的軟件設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。 二、單例模式的技巧 利用$_instance私有變量來保存類的唯一實例化對象; 設計一個getInstance對外公開的函數,...
摘要:需要說明的是在設計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式,將簡單工廠模式看為工廠方法模式的一種特例,兩者歸為一類。工廠模式的作用工廠模式的作用封裝變化創建邏輯有可能變化,封裝成工廠類之后,創建邏輯的變更對調用者透明。1、什么是工廠模式Define an interface for creating an object,but let subclasses decide whi...
閱讀 3199·2021-11-10 11:36
閱讀 3145·2021-11-02 14:39
閱讀 1726·2021-09-26 10:11
閱讀 4929·2021-09-22 15:57
閱讀 1685·2021-09-09 11:36
閱讀 2053·2019-08-30 12:56
閱讀 3487·2019-08-30 11:17
閱讀 1702·2019-08-29 17:17