大话设计模式java版--简单工厂模式

本文介绍了简单工厂模式在Java中的应用,通过设计一个计算器来演示。内容包括需求分析、设计思路以及逐步优化的三个版本代码(ver1.0、ver2.0、ver3.0),展示了如何将UI代码与算法代码分离,以提高代码的可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚学习了系统分析与设计,发现设计模式真的是个好东西。因此看了下好久之前买的《大话设计模式》,因此总结下最近的学习的设计模式,废话到此结束。

这里的代码跟书上的差不多,但书上的是C#版的,这里我自己重新写的是Java的。。。。其实都差不多,好不好

现在就简单说说简单工厂模式:

需求:设计个计算器,两个数字之间的加减乘除基本运算。

分析:计算器加减乘除是基本运算,万一用户需要添加新运算,例如n次方。

设计:将算法类抽象为抽象类,具体算法继承算法类。

代码:

运算抽象类:

package com.jing.simpleFactory;

public abstract class Operation {
	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;
	}
	protected double num1;
	protected double num2;
	public abstract double getResult() throws Exception;
}

具体算法:
package com.jing.simpleFactory;

public class OperationDiv extends Operation{

	@Override
	public double getResult() throws Exception {
		if(num2 == 0){
			throw new Exception("除数不能为0");
		}
		return num1/num2;
	}

}


package com.jing.simpleFactory;

public class OperationAdd extends Operation{

	@Override
	public double getResult() {
		return num1 + num2;
	}

}
package com.jing.simpleFactory;

public class OperationMul extends Operation{

	@Override
	public double getResult() throws Exception {
		
		return num1 * num2;
	}

}


package com.jing.simpleFactory;

public class OperationSub extends Operation{

	@Override
	public double getResult() {
		return num1 - num2;
	}

}

简单工厂:

package com.jing.simpleFactory;

public class OperationFactory {
	public static Operation createOperation(String operate){
		if(operate.equals("+")){
			return new OperationAdd();
		}else if(operate.equals("-")){
			return new OperationSub();
		}else if(operate.equals("*")){
			return new OperationMul();
		}else if(operate.equals("/")){
			return new OperationDiv();
		}else{
			return null;
		}
	}
}

Main函数:

package com.jing.simpleFactory;


public class Test {

	
	
	public static void main(String[] args) {
//ver1.0
////		Test test = new Test();
////		System.out.println(test.add(1,2));
//		System.out.println("请输入两个数字");
//		Scanner scan = new Scanner(System.in);
//		String num1 = scan.next();
//		scan = new Scanner(System.in);
//		String num2 = scan.next();
//		System.out.println("输入符号");
//		scan = new Scanner(System.in);
//		String oper = scan.next();
//		if(oper.equals("+")){
//			
//		}else if(oper.equals("-")){
//			
//		}else if(oper.equals("*")){
//			
//		}else if(oper.equals("/")){
//			
//		}
//		System.out.println(num1 + " " +num2 +" "+ oper);
//		
//		//ver2.0
//		Operation oper = new OperationAdd();
//		oper.setNum1(1.1);
//		oper.setNum2(2.2);
//		try {
//			System.out.println(oper.getResult());
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		
		//ver3.0
		Operation oper = OperationFactory.createOperation("/");
		oper.setNum1(1.1);
		oper.setNum2(3);
		try {
			System.out.println(oper.getResult());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
}


大家结合着书来看会更有益处。其中main函数中有三个版本哦:三个版本也是不断进步的版本。

大家先看看main函数中版本ver1.0:

这是最开始的版本。ui代码与算法代码结合在一起,这种版本的代码修改起来牵连太多。

ver2.0:

在2.0版本中,new生成对象处理交给了客户端处理了。

ver3.0(最终版本 简单设计模式):

在这版本中利用工厂控制了对象生成的处理,如果需求修改的话,就要修改工厂类和添加上相应的算法类。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值