簡單工廠模式是類的創建模式,又叫做靜態工廠方法(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(),若多的話更不方便,此時用此模式就不方便了,工廠模式便可以派上用場了(下文繼續更新)