简单工厂模式
原理: 先创建一个接口,由子类继承,需要生成什么格式文件就生成什么格式文件
优点: 传递文件类型,直接new生成,比较简单
缺点: 工厂类单一,扩展时,业务逻辑比较多
package com.xm.designpattern.factory;
/**
* 简单工厂模式
* 原理: 先创建一个接口,由子类继承,需要生成什么格式文件就生成什么格式文件
* 优点: 传递文件类型,直接new生成,比较简单
* 缺点: 工厂类单一,扩展时,业务逻辑比较多
* @author ouyangjun
*/
public class SimpleFactory {
public interface Workbook {
void create();
}
public class HSSFWorkbook implements Workbook {
@Override
public void create() {
System.out.println("生成一个xls文件!");
}
}
public class XSSFWorkbook implements Workbook {
@Override
public void create() {
System.out.println("生成一个xlsx文件!");
}
}
public class WorkbookFactory {
/**
* 根据传递的类型,生成需要创建的产品
* @param type
* @return
*/
public Workbook getWorkbook(String type){
if(type==null){
return null;
}
if("xls".equals(type)){
return new HSSFWorkbook();
} else if("xlsx".equals(type)) {
return new XSSFWorkbook();
}
return null;
}
}
public static void main(String[] args) {
// 由于是工程类内部类,所有需要先实例化外部类,再实例化内部类
SimpleFactory simple = new SimpleFactory();
// 初始化工厂类
WorkbookFactory factory = simple.new WorkbookFactory();
// 调用生成xls方法
Workbook xls = factory.getWorkbook("xls");
xls.create();
// 调用生成xlsx方法
Workbook xlsx = factory.getWorkbook("xlsx");
xlsx.create();
}
}
工厂模式
原理: 创建生成接口,又子类负责实例化
优点: 更面向对象,可删减代码,不影响原功能
package com.xm.designpattern.factory;
/**
* 工厂模式
* 原理: 创建生成接口,又子类负责实例化
* 优点: 更面向对象,可删减代码,不影响原功能
* @author ouyangjun
*/
public class FactoryPattern {
public interface Workbook {
void create();
}
public class HSSFWorkbook implements Workbook {
@Override
public void create() {
System.out.println("生成一个xls文件!");
}
}
public class XSSFWorkbook implements Workbook {
@Override
public void create() {
System.out.println("生成一个xlsx文件!");
}
}
public class WorkbookFactory {
public Workbook getHSSFWorkbook(){
return new HSSFWorkbook();
}
public Workbook getXSSFWorkbook(){
return new XSSFWorkbook();
}
}
public static void main(String[] args) {
// 由于是工程类内部类,所有需要先实例化外部类,再实例化内部类
FactoryPattern simple = new FactoryPattern();
// 初始化工厂类
WorkbookFactory factory = simple.new WorkbookFactory();
// 调用生成xls方法
Workbook xls = factory.getHSSFWorkbook();
xls.create();
// 调用生成xlsx方法
Workbook xlsx = factory.getXSSFWorkbook();
xlsx.create();
}
}
抽象工厂
原理: 把不同的产品进行组合,创建新的工厂类,由多个工厂处理
package com.xm.designpattern.factory;
/**
* 抽象工厂
* 原理: 把不同的产品进行组合,创建新的工厂类,由多个工厂处理
* @author ouyangjun
*/
public class AbstractFactory {
public interface Workbook {
void create();
}
public class HSSFWorkbook implements Workbook {
@Override
public void create() {
System.out.println("生成一个xls文件!");
}
}
public class XSSFWorkbook implements Workbook {
@Override
public void create() {
System.out.println("生成一个xlsx文件!");
}
}
public interface Attachment {
void create();
}
public class ZIPAttachment implements Attachment {
@Override
public void create() {
System.out.println("生成一个zip文件!");
}
}
public class RARAttachment implements Attachment {
@Override
public void create() {
System.out.println("生成一个rar文件!");
}
}
/**
* 产品生成工厂类
*/
public abstract class BasicFactory{
public abstract Workbook createWorkbook();
public abstract Attachment createAttachment();
}
public class ZIPWorkbookFactory extends BasicFactory {
@Override
public Workbook createWorkbook() {
return new HSSFWorkbook();
}
@Override
public Attachment createAttachment() {
return new ZIPAttachment();
}
}
public class RARWorkbookFactory extends BasicFactory {
@Override
public Workbook createWorkbook() {
return new XSSFWorkbook();
}
@Override
public Attachment createAttachment() {
return new RARAttachment();
}
}
public static void main(String[] args) {
// 由于是工程类内部类,所有需要先实例化外部类,再实例化内部类
AbstractFactory simple = new AbstractFactory();
// 初始化工厂类
ZIPWorkbookFactory zipFactory = simple.new ZIPWorkbookFactory();
// 调用生成xls方法
Workbook xls = zipFactory.createWorkbook();
xls.create();
// 调用生成zip方法
Attachment zip = zipFactory.createAttachment();
zip.create();
// 初始化工厂类
RARWorkbookFactory rarFactory = simple.new RARWorkbookFactory();
// 调用生成xls方法
Workbook xlsx = rarFactory.createWorkbook();
xlsx.create();
// 调用生成rar方法
Attachment rar = rarFactory.createAttachment();
rar.create();
}
}
本章完结,待续!
本文说明:该文章属于原创,如需转载,请标明文章转载来源