按理说应该把书全都看完一遍,再开始写博客比较科学,会有比较全面的认识。
但是既然都决定要按规律更新博客了,只能看完一个设计模式写一篇了。
也算是逼自己思考了,不是看完就过,至少得把代码自己都敲一遍。
刚开始可能写的比较浅显,更像是读书笔记,只能未来回来完善了。
废话啰嗦到这,开始正题。
文章是以一个面试中,面试官要求写一个计算器开头的。
巧的是,在之前的一次面试中,刚好面试官也问了这个问题,当时我并不能给出令人满意的答案,只恨没有早点学习设计模式啊。
代码不光是要完成功能就完事了,还要考虑健壮性、复用性、可扩展性等等。
学习设计模式的意义也在于此,帮助我们写出更加优雅的代码。
那么回到之前的问题,如果现在要你写一个计算器的程序,你会怎么写呢?
我的第一反应和书中的菜鸟一样,特别还是在面试中,时间紧迫,当然是把功能完成了就OK,为什么要考虑那么复杂,写一个方法直接搞定:
(这里为了代码的简洁性,暂时不考虑用户不按规范输入,除零、浮点失精这种健壮性问题。)
1 package designpattern.staticfactorymethod; 2 import java.util.Scanner; 3 public class Calculator { 4 public static void main(String[] args) { 5 Scanner scanner = new Scanner(System.in); 6 System.out.println("请输入一个数字"); 7 double num1 = scanner.nextDouble(); 8 System.out.println("请输入一个运算符:+、-、*、/"); 9 String operator = scanner.next();// 不能用nextLine(),会把上一个回车给吸收10 System.out.println("请输入一个数字"); 11 double num2 = scanner.nextDouble(); 12 switch (operator) { 13 case "+": 14 System.out.println(num1 + num2); 15 break; 16 case "-": 17 System.out.println(num1 - num2); 18 break; 19 case "*": 20 System.out.println(num1 * num2); 21 break; 22 case "/": 23 System.out.println(num1 / num2); 24 break; 25 default: 26 break; 27 } 28 scanner.close(); 29 } 30 }
最多把计算的方法单拉出来:
package designpattern.staticfactorymethod; import java.util.Scanner;

