java设计模式之---工厂模式在开发中的运用

本文介绍了一个基于面向对象设计思想的简单计算器实现方案。利用工厂方法模式创建不同的运算对象,通过抽象基类`Operation`和具体子类`AddOperation`实现了加法运算。此设计易于扩展其他运算类型,遵循开放-封闭原则。

问题

写一个简单的计算器

分析

如果使用完全面向过程设计, 那么缺少代码重用, 不合理
应该采用面向对象的设计思想

代码

采用工厂方法模式

工厂
public interface OperationFactory {
	public Operation getOperation();
}
public class AddOperationFactory implements OperationFactory {
	@Override
	public Operation getOperation() {
		return new AddOperation();
	}
}

产品
public abstract class Operation {

	private double num1;
	private double num2;

	public double getNum1() {
		return num1;
	}

	public void setNum1(double num1) {
		this.num1 = num1;
	}

	public double getNum2() {
		return num2;
	}

	public void setNum2(double num2) {
		this.num2 = num2;
	}

	public abstract double getResult();

}
public class AddOperation extends Operation {
	@Override
	public double getResult() {
		double result = this.getNum1() + this.getNum2();
		return result;
	}
}

测试代码
public class MainClass {
	public static void main(String[] args) {
		System.out.println("输入第一个操作数");
		Scanner scanner = new Scanner(System.in);
		String strNum1 = scanner.nextLine();

		System.out.println("输入操作符");
		String oper = scanner.nextLine();

		System.out.println("输入第一个操作数");
		String strNum2 = scanner.nextLine();
		scanner.close();

		double result = 0;
		double num1 = Double.parseDouble(strNum1);
		double num2 = Double.parseDouble(strNum2);

		if ("+".equals(oper)) {
			OperationFactory operationFactory = new AddOperationFactory();
			Operation operation = operationFactory.getOperation();
			operation.setNum1(num1);
			operation.setNum2(num2);
			result = operation.getResult();

		}

		System.out.println(strNum1 + oper + strNum2 + "=" + result);

	}
}
注: 本例中只写了加法操作运算, 如添加其他运算 可以通过实现Operation接口来增加新的运算类, 实现OperationFactory接口来增加新的运算工厂. 符合开放-封闭原则

使用简单工厂也可以完成,客户端省去判断操作符的逻辑, 由工厂来完成 可以用反射+配置文件(根据id或name 来找到class)来创建对象
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值