接着來看工廠模式,工廠方法模式是類的創建模式,又叫做虛擬構造子(Virtual Constructor)模式或者多態性工廠(Polymorphic Factory)模式。
工廠方法模式的實質是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類中。即定義一個總工廠(即抽象工廠)接口,在子工廠(即具體工廠)中實現總工廠接口裏的方法,即在子工廠裏創建具體的實例對象。
還繼續上節的打印文件,現在要打印兩種類型的文件,每種類型又有兩種格式文件,分別爲Html和Pdf,先定義一個總工廠,源代碼如下:
public interface ExportFactory {
public ExportFile factory(String type);
}
(2)子工廠實現抽象工廠裏的方法,即創建一種格式所有的類型的對象的邏輯
package com.studyart;
//Html格式的工廠,有standard和financial兩種類型
public class ExportHtmlFactory implements ExportFactory{
@Override
public ExportFile factory(String type) {
// TODO Auto-generated method stub
if("standard".equals(type)){
return new ExportStandardHtmlFile();
}else if("financial".equals(type)){
return new ExportFinancialHtmlFile();
}else{
throw new RuntimeException("沒有找到對象");
}
}
}
package com.studyart;
public class ExportPdfFactory implements ExportFactory {
//Pdf格式的工廠,有standard和financial兩種類型
@Override public ExportFile factory(String type) { // TODO Auto-generated method stub if("standard".equals(type)){ return new ExportStandardPdfFile(); }else if("financial".equals(type)){ return new ExportFinancialPdfFile(); }else{ throw new
RuntimeException("沒有找到對象"); } }}
(3)在定義導出文件的接口,實現所有類型的格式文件的具體邏輯
package com.studyart;
public interface ExportFile {
public boolean export();
}
public class ExportFinancialHtmlFile implements ExportFile{
@Override
public boolean export() {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
System.out.println("導出財務版HTML文件");
return true;
}
}
public class ExportFinancialPdfFile implements ExportFile{
@Override
public boolean export() {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
System.out.println("導出財務版PDF文件");
return true;
}
}
public class ExportStandardHtmlFile implements ExportFile{
@Override
public boolean export() {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
System.out.println("導出標準HTML文件");
return true;
}
}
public class ExportStandardPdfFile implements ExportFile {
@Override
public boolean export() {
// TODO Auto-generated method stub
/**
* 業務邏輯
*/
System.out.println("導出標準PDF文件");
return true;
}
}
(4)測試
package com.studyart;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExportFactory exportFactory = new ExportHtmlFactory();
ExportFile ef = exportFactory.factory("standard");
boolean bool = ef.export();
if (bool) {
/**
* 業務邏輯
*/
System.out.println("打印成功");
} else {
/**
* 業務邏輯
*/
System.out.println("打印失敗");
}
}
}
工廠模式到這就介紹完了。
可以看出,工廠模式將簡單工廠模式又做了細分,簡單工廠模式是將所有的邏輯都寫在一個具體工廠裏,而工廠模式是定義一個接口(抽象工廠),讓多個具體工廠實現這個接口,而每個具體工廠則可以處理一種具體的事物(他有多種類型),這也便是工廠模式的核心。