跟大家講解下有關詳解PHP之簡單工廠模式,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說詳解PHP之簡單工廠模式,小編也收集到了有關詳解PHP之簡單工廠模式的相關資料,希望大家看到了會喜歡。
本文主要為大家分享一篇詳解PHP之簡單工廠模式 ,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧。1.簡單工廠的定義
提供一個創建對象實例的功能,而無需關系其具體實現,被創建實例的類型可以是接口、抽象類,也可以是具體的類。
2.簡單工廠的結構和說明
簡單工廠的結構如下圖:
Api: 定義客戶所需要的功能接口
Impl: 具體實現Api的實現類,可能會有多個
Factory: 工廠,選擇合適的實現類來創建Api接口對象
Client: 客戶端,通過Factory 來獲取Api接口對象,然后面向Api接口編程
Api接口:
/** * 接口的定義,該接口可以通過簡單工廠來創建 * * @author Administrator * */public interface Api {/** * 具體功能方法的定義 * * @param s * 需要的參數 */public void operation(String s);}ImplA:
/** * 接口的具體實現對象A * * @author Administrator * */public class ImplA implements Api {@Overridepublic void operation(String s) {// 實現的功能System.out.println("ImplA s==" + s);}}ImplB:
/** * 接口的具體實現對象B * * @author Administrator * */public class ImplB implements Api {@Overridepublic void operation(String s) {// 實現的功能System.out.println("ImplB s==" + s);}}Factory:
/** * 工廠類,用來創建Api對象 * * @author Administrator * */public class Factory {/** * 具體創建Api對象的方法 * * @param condition * 從外部傳入的選擇條件 * @return */public static Api createApi(int condition) {// 應該根據某些條件去選擇究竟創建哪一個具體的實現對象// 這些條件可以從外部傳入,也可以從其他途徑獲取// 如果只有一個實現,可以省略條件Api api = null;if (condition == 1) {api = new ImplA();} else if (condition == 2) {api = new ImplB();}return api;}}測試類Client:
public class Client {public static void main(String[] args) {// 通過簡單工廠來獲取接口對象Api api = Factory.createApi(1);api.operation("正在使用簡單工廠模式");}}簡單工廠的調用順序示意圖:
簡單工廠的命名建議:
類命名建議為“模塊名稱+Factory”,比如,用戶模塊的工廠就稱為UserFactory
方法名稱通常為“get+接口名稱”或者是“create+接口名稱”。比如用戶接口名稱為UserEbi,那么方法名稱通常為getUserEbi或者createUserEbi。
簡單工廠方法的內部主要實現的功能是“選擇合適的實現類”,選擇條件或者是參數的來源通常為一下集中:
來源于客戶端,由Client來傳入參數
來源于配置文件,從配置文件獲取用于判斷的值
來源于程序運行期的某個值,比如從緩存中獲取某個運行期的值
簡單工廠的優點:
幫助封裝
簡單工廠雖然簡單,但是非常友好地幫助我們實現了組件的封裝,然后讓組件外部能真正面向接口編程。
2. 解耦
通過簡單工廠,實現了客戶端和具體實現類的解耦。
簡單工廠的缺點:
1. 可能增加客戶端的復雜度
2.不方便擴展子工廠
簡單工廠的本質:選擇實現
何時選擇簡單工廠:
如果想完全封裝隔離具體實現,讓外部只能通過接口來操作封裝體,那么可以選擇簡單工廠,讓客戶端通過工廠來獲取相應的接口,而無須關心具體的實現。
如果想要把對外創建對象的職責集中管理和控制,可以選擇簡單工廠。
以上就是詳解PHP之簡單工廠模式的詳細內容,更多請關注php中文網其它相關文章!
來源:php中文網