第二章: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();
	}
	
}

本章完结,待续!

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

猜你喜欢

转载自blog.csdn.net/p812438109/article/details/81712911