java設計模式之工廠模式

接着來看工廠模式,工廠方法模式是類的創建模式,又叫做虛擬構造子(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("打印失敗");
        }
	}

}
工廠模式到這就介紹完了。

可以看出,工廠模式將簡單工廠模式又做了細分,簡單工廠模式是將所有的邏輯都寫在一個具體工廠裏,而工廠模式是定義一個接口(抽象工廠),讓多個具體工廠實現這個接口,而每個具體工廠則可以處理一種具體的事物(他有多種類型),這也便是工廠模式的核心。

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