java設計模式之簡單工廠模式

簡單工廠模式是類的創建模式,又叫做靜態工廠方法(Static Factory Method)模式。他是由一個工廠類決定創建出哪一種產品類的實例。

該模式的主要思想就是創建一個具體的工廠類(該類裏包含了所有創建產品的實例的邏輯),用戶只需通過傳入類型而由他來決定創建那種產品的實例。

舉個例子,假如現在需要導出一種標準類型文件,他有Html格式和Pdf格式,(1)首先自然的做法便是定義一個導出文件的接口,源代碼如下:

package com.studyart;
//文件格式的接口,所有格式繼承此接口完成各格式的具體邏輯
public interface ExportFile {
    public boolean export();
}
(2)然後通過繼承此接口,實現Html格式和Pdf格式的具體邏輯。

package com.studyart;

public class ExportFinancialHtmlFile implements ExportFile{

    @Override
    public boolean export() {
        // TODO Auto-generated method stub
        /**
         * 業務邏輯
         */
        System.out.println("導出財務版HTML文件");
        return true;
    }
}

package com.studyart;

public class ExportFinancialPdfFile implements ExportFile{

    @Override
    public boolean export() {
        // TODO Auto-generated method stub
        /**
         * 業務邏輯
         */
        System.out.println("導出財務版PDF文件");
        return true;
    }
}

(3)創建一個工廠類,根據調用者不同的要求,創建出不同的導出對象並返回。而如果碰到不合法的要求,會返回一個Runtime異常。
package com.studyart;
//定義一工廠類,用於創建各種格式的對象
public class ExportStandarFactory {
	 public static ExportFile factory(String type){
	        if(type.equals("Html")){
	            
	            return new ExportFinancialHtmlFile();
	            
	        }else if(type.equals("Pdf")){
	            
	            return new ExportFinancialPdfFile();
	            
	        }else{
	            /**
	             * 這裏拋出一個自定義異常會更恰當
	             */
	            throw new RuntimeException("沒有找到打印類型");
	        }
	    }
}
(4)測試類

package com.studyart;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String exportType = "Pdf";
		ExportFile exportFile = ExportStandarFactory.factory(exportType);
		boolean bool = exportFile.export();
		if (bool) {
            /**
             * 業務邏輯
             */
			System.out.println("打印成功");
        } else {
            /**
             * 業務邏輯
             */
        	System.out.println("打印失敗");
        }
	}

}

簡單工廠模式就是這樣了。

從中可以看出所有創建對象的邏輯都放在了工廠類中,而這也限定了此模式不能處理複雜的邏輯,因爲所有的業務邏輯都在這個工廠類中實現,此爲牽一髮而動全身啊。拿此例來說,現在導出的標準類型文件只有兩種,可以用此模式,但如果現在又需要導出其他類型的文件,如財政類型的,他又有兩種格式,也是Html格式和Pdf格式等,如果用簡單工廠模式的話,工廠類至少需要四個if()else(),若多的話更不方便,此時用此模式就不方便了,工廠模式便可以派上用場了(下文繼續更新)


發佈了33 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章