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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章