第二天-工厂方法模式

#设计模式
工厂方法模式,也叫作虚拟构造子模式,多态性工厂模式

#解释
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中

#场景举例
导入导出功能,比如系统需要导出报表数据,那么就需要支持excel,pdf等格式

##流程
客户端创建ExportHtmlFactory对象,这时客户端所持有变量的静态类型为ExportFactory,而实际类型为ExportHtmlFactory。然后客户端调用ExportHtmlFactory对象的工厂方法factory(),接着后者调用ExportFinancialHtmlFile的构造子创建出导出对象

#简单工厂模式和工厂方法模式的区别
使用简单工厂模式则工厂类会过于臃肿,伴随着需求的增加,会出现越来越多的if/else;
使用工厂方法模式则工厂类不是负责所有的对象的创建。而是将具体的创建交给子类去做,这个核心类摇身一变就成为了一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个类应当被实例化这种细节

#优点
进一步抽象,允许了系统在不修改具体工厂角色的情况下引进新的产品

#角色
抽象工厂角色:工厂的核心,任何在模式中创建对象的工厂类必须实现这个接口。在实际的系统中,这个角色也常常使用抽象类实现
具体工厂角色:实现了抽象工厂接口的具体JAVA类,具体工厂角色含有与业务密切相关的逻辑,并且受到使用者的调用以创建导出类(如:ExportStandardHtmlFile)
抽象导出角色:对象的超类,所有导出类的共同父类或共同拥有的接口。在实际的系统中,这个角色也常常用抽象类来实现
具体导出角色:实现了抽象导出角色所声明的接口,工厂方法模式所创建的每一个对象都是某个具体导出对象的实例

源代码如下:

ExportFile.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportFile
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:33
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 抽象导出文件类</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:33
 * @Version 1.0
 */
public interface ExportFile {
        boolean export(String data);
}
ExportFactory.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportFactory
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:30
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 抽象工厂角色</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:30
 * @Version 1.0
 */
public interface ExportFactory {
    ExportFile getFactory(String type);

}
ExportHtmlFactory.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportHtmlFactory
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:31
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 具体工厂角色类</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:31
 * @Version 1.0
 */
public class ExportHtmlFactory implements ExportFactory{

    @Override
    public ExportFile getFactory(String type) {
        if("Standard".equals(type)){
            ExportStandardHtmlFile exportStandardHtmlFile = new ExportStandardHtmlFile();
            return exportStandardHtmlFile;
        }else{
            ExportFinancialHtmlFile exportFinancialHtmlFile = new ExportFinancialHtmlFile();
            return exportFinancialHtmlFile;
        }
    }
}
ExportPdfFactory.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportPdfFactory
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:32
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 具体工厂角色表</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:32
 * @Version 1.0
 */
public class ExportPdfFactory implements ExportFactory{

    @Override
    public ExportFile getFactory(String type) {
        if("Standard".equals(type)){
            ExportStandardPdfFile exportStandardPdfFile = new ExportStandardPdfFile();
            return exportStandardPdfFile;
        }else{
            ExportFinancialPdfFile exportFinancialPdfFile = new ExportFinancialPdfFile();
            return exportFinancialPdfFile;
        }
    }
}
ExportFinancialHtmlFile.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportFinancialHtmlFile
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:36
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 导出财务版HTML文件</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:36
 * @Version 1.0
 */
public class ExportFinancialHtmlFile implements ExportFile{

    @Override
    public boolean export(String data) {
        System.out.println("导出财务版HTML文件,数据为:"+data);
        return true;
    }
}
ExportFinancialPdfFile.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportFinancialPdfFile
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:37
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 导出财务版PDF文件</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:37
 * @Version 1.0
 */
public class ExportFinancialPdfFile implements ExportFile{

    @Override
    public boolean export(String data) {
        System.out.println("导出财务版PDF文件,数据为:"+data);
        return true;
    }
}
ExportStandardHtmlFile.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportStandardHtmlFile
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:37
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 导出标准HTML文件</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:37
 * @Version 1.0
 */
public class ExportStandardHtmlFile implements ExportFile{

    @Override
    public boolean export(String data) {
        System.out.println("导出标准HTML文件,数据为:"+data);
        return true;
    }
}
ExportStandardPdfFile.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.ExportStandardPdfFile
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:38
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

/**
 * <p>Title: 导出标准PDF文件</p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:38
 * @Version 1.0
 */
public class ExportStandardPdfFile implements ExportFile{

    @Override
    public boolean export(String data) {
        System.out.println("导出标准PDF文件,数据为:"+data);
        return true;
    }
}
TestFactoryMethod.java
/******************************************************************
 * 文件名称: csdn26.factoryMethod.TestFactoryMethod
 * 系统名称: 设计模式大全
 * 模块名称: 
 * 软件版权: Lucky
 * 功能说明: 
 * 系统版本: 1.0
 * 开发人员: Lucky
 * 开发时间: 2021/8/6 15:38
 * 修改记录: 
 * 程序版本             修改日期                修改人员                        修改单号                               修改说明   
 *******************************************************************/
package csdn26.factoryMethod;

import org.junit.Test;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 *
 * @Author Lucky
 * @Date 2021/8/6 15:38
 * @Version 1.0
 */
public class TestFactoryMethod {

    @Test
    public void test(){
        String type ="Standard";
        String data ="行情数据";
        ExportFactory factory = new ExportHtmlFactory();
        factory.getFactory(type).export(data);
        type = "Financial";
        factory = new ExportPdfFactory();
        factory.getFactory(type).export(data);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值