第二章:Java设计模式-工厂模式

简单工厂模式

原理: 先创建一个接口,由子类继承,需要生成什么格式文件就生成什么格式文件

优点: 传递文件类型,直接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();
	}
	
}

本章完结,待续!

 

本文说明:该文章属于原创,如需转载,请标明文章转载来源

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值