zoukankan      html  css  js  c++  java
  • 使用简单工厂模式写一个简单的计算器!!!

    很经典又基本的一个面试题了,新手基本都会掉进去的坑,还是没有自己的变成思想,哈哈.....

    其实主要就是考虑一下使用面向对象和接口,以及计算器的可扩展性,话不多说:

    接口:

    //运算类接口
    public interface Operator {
    	//获取结果
    	public double getResult(double num1,double num2);
    
    }
    

      

    运算的实现类:

    //加法运算
    public class AddOperator implements Operator {
    	@Override
    	public double getResult(double num1, double num2) {
    		return num1+num2;
    	}
    
    }
    

      

    //除法
    public class DivOperator implements Operator {
    	@Override
    	public double getResult(double num1, double num2) {
    		if(num2!=0){
    			return num1*num2;			
    		}else{
    			System.out.println("除数不能为0");
    			return 0;
    		}
    	}
    }
    

      其他运算类似

    运算工厂:

    //创建运算类工厂
    public class OperatorFactory {
    	//返回运算类对象
    	public static Operator getOperator(String oper){
    		if(oper.equals("+")){
    			return new AddOperator();
    		}else if(oper.equals("-")){
    			return new SubOperator();
    		}else if(oper.equals("*")){
    			return new MulOperator();
    		}else if(oper.equals("/")){
    			return new DivOperator();
    		}else{
    			System.out.println("目前不支持这种操作");
    			return null;
    		}
    	}
    }
    

      

    主函数测试:

    //使用工厂模式开发一个简单计算器
    public class CaclTest {
    	public static void main(String[] args) {
    		System.out.println("请输入第一个数字:");
    		Scanner scanner=new Scanner(System.in);
    		String num1 = scanner.nextLine();
    		System.out.println("请输入运算符(+-*/):");
    		String oper = scanner.nextLine();
    		System.out.println("请输入第二个数字:");
    		String num2 = scanner.nextLine();
    		//通过工厂获取运算类
    		Operator operator = OperatorFactory.getOperator(oper);
    		if(operator!=null){
    			if(isDouble(num1) && isDouble(num2)){
    				double result = operator.getResult(Double.parseDouble(num1), Double.parseDouble(num2));
    				System.out.println("结果是:"+result);							
    			}else{				
    				System.out.println("请输入正确的数字!");							
    			}
    		}
    	}
    	//判断浮点数(double和float)
    	private static boolean isDouble(String str) {
    		if (null == str || "".equals(str)) {
    			return false;
    		}
    		Pattern pattern = Pattern.compile("^[0-9]+(.[0-9]+)?$");//数字,包括整数和浮点
    		return pattern.matcher(str).matches();
    	}
    }
    

      主要考虑一下可能遇到的异常就行了,这里如果以后要增加运算的话,需要改一下工厂类,并添加一个具体运算实现类,想想也挺麻烦的,哈哈

  • 相关阅读:
    (转) Hibernate检索方式概述
    (转) Hibernate注解开发
    (转)Hibernate关联映射——一对多(多对一)
    (转)学习淘淘商城第二十二课(KindEditor富文本编辑器的使用)
    (转)Hibernate关联映射——对象的三种关系
    (转)Hibernate的一级缓存
    (转) Hibernate持久化类与主键生成策略
    ( 转)Hibernate常用API
    (转)Hibernate的配置详解
    范仁义css3课程---22、float导致的父容器高度坍塌及解决
  • 原文地址:https://www.cnblogs.com/houzheng/p/9440170.html
Copyright © 2011-2022 走看看