大话设计模式阅读笔记(1)之工厂模式心得

面试实现一个计算器:

对于一个初学者会有的问题:

1、会有命名不规则的毛病;

2、编程不会考虑计算机的运行效率;

3、不会考虑许多的异常处理,程序的健壮性不强;

4、在使用面向对象语言的时候没有面向对象的思维,编写的程序依然是面向过程式的思维;

备注:

许多的编程初学者都会有这样的一个问题,就是遇到问题就直觉地使用计算机能够理解的逻辑来描述和表达待解决的问题以及具体的求解过程。这其实是用计算机的方式去思考,比如计算器程序,先要求输入两个数和运算符号,然后根据运算符号判断选择如何运算得到结果,这本身没有错,但这样的思维会使得我们的程序只为满足实现当前的需求,程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量的代码要求。

解决方案:

使用面向对象的分析设计编程思想,考虑通过封装继承多态把程序的耦合度降低,使用设计模式使得程序更加的灵活,容易修改,并且易于复用。程序一般会将业务逻辑和界面逻辑分开,让他们之间的耦合度降低。只有分离开才可以达到容易维护和扩展。

以下是面向过程编程改进之后成果使用了简单工厂模式

操作数类,对数据进行封装:

public abstract class Operation {
	private double numberA=0;
	private double numberB=0;
	private double result=0;
		
	public void setResult(double result) {
		this.result = result;
	}
	public abstract double getResult();
	public double getNumberA() {
		return numberA;
	}
	public void setNumberA(double numberA) {
		this.numberA = numberA;
	}
	public double getNumberB() {
		return numberB;
	}
	public void setNumberB(double numberB) {
		this.numberB = numberB;
	}	
}

加减乘除类:

public class OperationAdd extends Operation{
	@Override
	public double getResult() {		
		return getNumberA()+getNumberB();
	}
}
public class OperationSub extends Operation {
	@Override
	public double getResult() {		
		return getNumberA()-getNumberB();
	}
}
public class OperationMul extends Operation {
	@Override
	public double getResult() {	
		return getNumberA()*getNumberB();
	}
}
public class OperationDiv extends Operation {
        @Override
	public double getResult() {
		if(getNumberB()==0){
			try {
				throw new Exception("除数不能为0");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}		
		return getNumberA()/getNumberB();
	}
}

运算工厂类:

public class OperationFactory {
	public static Operation createOperation(String operate){
		Operation oper=null;
		switch(operate){
		case "+":
			oper=new OperationAdd();
			break;
		case "-":
			oper=new OperationSub();
			break;
		case "*":
			oper=new OperationMul();
			break;
		case "/":
			oper=new OperationDiv();
			break;	
		}
		return oper;
	}
}

客户端逻辑代码:

public class Client {

	public static void main(String[] args) {
		java.util.Scanner sc=new java.util.Scanner(System.in);
		
		System.out.println("请输入你要进行的操作符:");
		String operation=sc.next();
		
		Operation oper=OperationFactory.createOperation(operation);
		System.out.println("请输入第一个操作数:");
		oper.setNumberA(sc.nextDouble());
		System.out.println("请输入第二个操作数:");
		oper.setNumberB(sc.nextDouble());
		
		System.out.println("计算结果为:"+oper.getResult());
	}
}

总结:

从一个小小的计算器程序中也可以学到很多的知识,要想写出高质量的代码,就要不断地学习,不断地思考。编写程序时,要学会考虑计算机的运行效率,考虑到代码的规范问题,考虑程序的健壮性、复用性、扩展性、维护性。通过不断地学习,编写的代码质量就会不断地提高。

猜你喜欢

转载自blog.csdn.net/ToBe_Coder/article/details/80446914
今日推荐