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