大话设计模式读后感之工厂模式

本文通过活字印刷术比喻介绍了面向对象的概念,并详细解析了一个使用简单工厂模式设计的计算器案例,展示了如何通过封装、继承和多态来提高程序的可维护性、可扩展性和可复用性。

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

一、面向对象思维(OOP)

何为面向对象,我举个例子:在北宋前,人们每当要复印新东西,都需要从新雕刻。当活字印刷术出现后,就省事多了。

活字印刷术作为对象具有属性和方法

1、封装:用的人不需要会雕刻只要认字就行了(便维护)。

2、继承:如果有缺少的字,只需要增加(可扩展)。

3、多态:可以应付各种印刷问题(可复用)。

那么我们使用活字印刷术不就是面向对象了么。

二、简单工厂模式

按照我们对之前面向对象思想的理解,那么我们要提高程序的可维护 、可复用、可扩展。

以实现简单计算器为

将一个简单的功能划分为 业务类、工厂类、逻辑类、磨具类

业务类:

public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		Model model=new Model();//引入磨具
		try {
			
			System.out.println("请输入数字A");
			model.setNumberA(scanner.nextLine());
			System.out.println("请输入运算符");
			model.setProcess(scanner.nextLine());
			System.out.println("请输入数字B");
			model.setNumberB(scanner.nextLine());
			FactoryDao dao=new FactoryDao();
			
			Model result=dao.operation(model);//工厂加工后的成品
			System.err.println(result.toString());
		}  catch (IllegalArgumentException e) {
			// TODO: handle exception
			System.out.println("错误!非法参数!");
			
		}
		
	}

工厂:流水线加工在这里我们使用switch作为逻辑判断

public class FactoryDao  {

	private AlgorithmDao algorithmDao=new AlgorithmDaoImpl();

	
	public Model operation(Model model){
		
		switch (model.getProcess()) {
		case "+":
			model.setResult(algorithmDao.sum(model.getNumberA(), model.getNumberB()));
			break;
			
		case "-":
			model.setResult(algorithmDao.reduce(model.getNumberA(), model.getNumberB()));
			break;
		case "*":
			model.setResult(algorithmDao.multiplication(model.getNumberA(), model.getNumberB()));
			break;
		case "/":
			model.setResult(algorithmDao.division(model.getNumberA(), model.getNumberB()));
			break;
	
		default:
			model.setResult("没有找到"+model.getProcess()+"运算符");
			break;
		}
		return model;
	
	}
	
}
逻辑处理类声明

public interface AlgorithmDao {
	
	public String sum(Double a,Double b);
	public String reduce(Double a,Double b);
	public String multiplication(Double a,Double b);
	public String division(Double a,Double b);

}
逻辑处理类实现

public class AlgorithmDaoImpl implements AlgorithmDao{

	public String sum(Double a, Double b) {
		// TODO 自动生成的方法存根
		
		return String.valueOf(a+b);
	}

	public String reduce(Double a, Double b) {
		// TODO 自动生成的方法存根
		return String.valueOf(a-b);
	}

	public String multiplication(Double a, Double b) {
		// TODO 自动生成的方法存根
		return String.valueOf(a*b);
	}

	public String division(Double a, Double b) {
		// TODO 自动生成的方法存根
		try{
			if(b==0)throw new IllegalArgumentException();
		}catch(IllegalArgumentException ex){
			return "除数不能为0!";
		}
		
		return String.valueOf(a/b);
	}
}
	磨具类//这里我进行了类型转换,如果失败会抛出非法字符异常(该异常为运行异常),并在业务类捕获这个异常。
public class Model {

	private Double NumberA;
	
	private Double NumberB;
	
	private String Process;
	
	private String Result;

	public Double getNumberA() {
		return NumberA;
	}

	public void setNumberA(String numberA) {
		
		NumberA = Double.valueOf(numberA);
	}

	public Double getNumberB() {
		return NumberB;
	}

	public void setNumberB(String numberB) {
		NumberB =Double.valueOf(numberB);
	}

	public String getProcess() {
		return Process;
	}

	public void setProcess(String process) {
		Process = process;
	}

	public String getResult() {
		return Result;
	}

	public void setResult(String result) {
		Result = result;
	}

	public String toString(){
		return NumberA+Process+NumberB+"="+Result;
	}

}

以上就是简单工厂模式设计


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值