设计模式之简单工厂模式(静态工厂模式)

简单工厂模式

什么是简单工厂模式?

简单来说:简单工厂模式就是通过创建一个工厂类,这个工厂类会根据输入参数的不同返回不同的类的实例,被创建的实例通常都有同一个父类。

简单工厂模式优点?

  1. 对象的创建交由工厂,客户端可以免除直接创建对象的职责,且不用关心对象创建的过程。
  2. 创建对象时,无需确定要创建哪个类,不需要知道类名,只需要知道参数即可。

简单工厂模式缺点?

  1. 对象的创建全部交由工厂类,逻辑繁多,职责过重,一旦异常会影响调用该工厂的所有方法。
  2. 简单工厂模式会导致类的个数增加,增加系统的复杂度。
  3. 系统扩展困难,一旦增加新类,便不得不修改工厂类的逻辑,违反开闭原则,同时也可能导致逻辑过于复杂。

简单工厂的适用环境?

  1. 工厂类负责创建的类的对象比较少,工厂方法业务逻辑简单。
  2. 客户端只知道传入工厂类的参数,对如何创建对象不关心。

举例(以加减乘除计算器为例)

  1. 创建一个抽象计算类
/*
 * 运算类(父类)
 */
public abstract class Operation {
	// 加减乘除抽象方法
	public abstract double getResule(double numA, double numB);
}
  1. 创建加减乘除四个子类
/**
 * 加法类
 */
public class AddOperation extends Operation{

	@Override
	public double getResule(double numA, double numB) {
		// TODO Auto-generated method stub
		return numA + numB;
	}
}
/*
 * 减法类
 */
public class SubOperation extends Operation{

	@Override
	public double getResule(double numA, double numB) {
		// TODO Auto-generated method stub
		return numA - numB;
	}
}
/*
 * 乘法类
 */
public class MulOperation extends Operation{

	@Override
	public double getResule(double numA, double numB) {
		// TODO Auto-generated method stub
		return numA * numB;
	}
}
/*
 * 除法类
 */
public class DivOperation extends Operation{

	@Override
	public double getResule(double numA, double numB) {
		// TODO Auto-generated method stub
		if(numB == 0) {
			throw new RuntimeException("除数不能为0.");
		}else {
			return numA / numB;			
		}
	}
}
  1. 创建简单工厂类
/*
 * 简单工厂类
 */
public class OperationFactory {

	public static Operation createOperation(String operate) {
		Operation operation = null;
		switch (operate) {
		case "+":
			operation = new AddOperation();
			break;
		case "-":
			operation = new SubOperation();
			break;
		case "*":
			operation = new MulOperation();
			break;
		case "/":
			operation = new DivOperation();
			break;
		default:
			break;
		}
		return operation;
	}
}
  1. 创建客户端测试类,打印输出结果
/*
 * 客户端测试类
 */
public class Main {
	public static void main(String[] args) {
		double result = OperationFactory.createOperation("+").getResule(10, 20);
		System.out.println(result);
	}
}

输出结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值