首頁 >後端開發 >php教程 >詳解PHP之簡單工廠模式

詳解PHP之簡單工廠模式

零到壹度
零到壹度原創
2018-03-29 11:48:388493瀏覽

本文主要為大家分享一篇詳解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 {

	@Override
	public void operation(String s) {
		// 实现的功能
		System.out.println("ImplA s==" + s);

	}

}

ImplB:

/**
 * 接口的具体实现对象B
 * 
 * @author Administrator
 *
 */
public class ImplB implements Api {

	@Override
	public 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。

簡單工廠方法的內部主要實現的功能是“

選擇合適的實作類別”,選擇條件或參數的來源通常為一下集中:

  1. 來自客戶端,由Client來傳入參數

  2. 來自設定文件,從設定檔取得用於判斷的值

  3. 來自程式運行期間的某個值,例如從快取中取得某個運行期間的值

簡單工廠的優點:

  1. 幫助封裝

           簡單工廠雖然簡單,但卻非常友善地幫助我們實作了元件的封裝,然後讓元件外部能真正面向介面程式設計。

    2. 解耦

          透過簡單工廠,實現了客戶端和特定實作類別的解耦。

簡單工廠的缺點:

1.可能增加客戶端的複雜度

2.不方便擴充子工廠

簡單工廠的本質:選擇實作

#何時選擇簡單工廠:

  • #如果想完全封裝隔離具體實現,讓外部只能透過接口來操作封裝體,那麼可以選擇簡單工廠,讓客戶端通過工廠來獲取相應的接口,而無須關心具體的實現。

  • 如果想要把對外建立物件的職責集中管理與控制,可以選擇簡單工廠。


推薦學習:《

PHP影片教學

以上是詳解PHP之簡單工廠模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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