• 简单工厂模式_计算器实现


    优点:

      1.不用自己再去new对象,工厂会根据给的标识,自动替你new出一个你想要的实现类对象。

      2.一定程度上在加减乘除之间实现了解耦合。提高了代码的复用性和扩展性。

    缺点:违反了开闭性,即新增功能还需要在源代码上修改。

    一、整体思想图:

     二、代码实现

      2.1 抽取固定模块类

    package com.design.bean;
    
    /**
     * 简单工厂模式——父类(抽取固定模块)
     * @author phoebe
     *
     */
    public class CaculateBean {
    	private double a;
    	private double b;
    	private double result;
    	public double getA() {
    		return a;
    	}
    	public void setA(double a) {
    		this.a = a;
    	}
    	public double getB() {
    		return b;
    	}
    	public void setB(double b) {
    		this.b = b;
    	}
    	public double getResult() {
    		return result;
    	}
    	public void setResult(double result) {
    		this.result = result;
    	}
    	
    	
    	
    }
    

      2.2 加法模块:

    package com.design.calimpl;
    
    import com.design.bean.CaculateBean;
    
    /**
     * 加法模块
     * @author phoebe
     *
     */
    public class Caculate_add extends CaculateBean {
    
    	@Override
    	public double getResult() {
    		return this.getA()+this.getB();
    	}
    }
    

      2.3减法模块/乘法模块/除法模块和加法模块一样

      2.4产生具体实例化对象工厂

      

    package com.design.factory;
    
    import com.design.bean.CaculateBean;
    import com.design.calimpl.Caculate_add;
    import com.design.calimpl.Caculate_div;
    import com.design.calimpl.Caculate_multi;
    import com.design.calimpl.Caculate_sub;
    import com.design.util.myException;
    
    /**
     * 控制具体采用哪一个实现类
     * @author phoebe
     *
     */
    public class CaculateFactory {
    
    	public static CaculateBean getBeanFactory(String str){
    		switch(str){
    			case "+" :
    				return new Caculate_add();
    			case "-" :
    				return new Caculate_sub();
    			case "*" :
    				return new Caculate_multi();
    			case "/" :
    				return new Caculate_div();
    			default:
    			try {
    				throw new myException();
    			} catch (myException e) {
    				e.printStackTrace();
    			}
    		}
    		return null;
    	}
    }
    

       2.5测试代码

      

    package com.design.test;
    
    import java.util.Scanner;
    
    import com.design.bean.CaculateBean;
    import com.design.factory.CaculateFactory;
    
    /**
     * 测试
     * @author phoebe
     *
     */
    public class Test {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		double a = sc.nextDouble();
    		double b = sc.nextDouble();
    		String tig = sc.next();
    		CaculateBean caculateBean = CaculateFactory.getBeanFactory(tig);
    		caculateBean.setA(a);
    		caculateBean.setB(b);
    		System.out.println(caculateBean.getResult());
    	}
    }
    
    Best Regards
  • 相关阅读:
    巧用 Patch Connect Plus 简化 Intune 第三方更新管理
    如何应对薄弱的企业安全意识
    Jira可视化数据分析解决方案
    终端安全:保护企业的关键
    为什么需要ITIL服务目录
    防抖、节流函数封装(站在巨人的肩膀上)
    vue服务器渲染--NUXT
    函数防抖,函数节流(站在巨人的肩膀上)
    MAC地址和IP地址的区别和联系(站在巨人的肩膀上)
    ES8新特性(2017)-- async/await详细介绍与使用
  • 原文地址:https://www.cnblogs.com/pecool/p/8215649.html
Copyright © 2020-2023  润新知