欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 反射模式

程序员文章站 2022-12-28 19:55:08
反射模式优化工厂类大量switch分支问题 第一步: 第二步: 第三步: 创建一个properties配置文件,将“加减乘”类变成简单配置 第四步: 修改工厂类 最后测试: 总结:修改后的工厂类,大大的减少了switch 判断,以后在加一个除法,只需要创建要给除法类,在配置文件加一个配置即可,不需要 ......

反射模式优化工厂类大量switch分支问题

继续上一篇工厂模式的案例,上一篇只有两个算法类(加法和减法),现在再加一个乘法

第一步:

//运算类
public class Operation {
    
    private double _numberA=0;
    private double _numberB=0;
    public double get_numberA() {
        return _numberA;
    }
    public void set_numberA(double _numberA) {
        this._numberA = _numberA;
    }
    public double get_numberB() {
        return _numberB;
    }
    public void set_numberB(double _numberB) {
        this._numberB = _numberB;
    }
    
    /**
     *得到运算结果 
     * @author ys-developer 
     * @return 
     * @since JDK 1.6
     */
    public double getResult(){
        double result=0;
        return result;
    }

}

第二步:

//加法类
public class OperationAdd extends Operation{
     @Override
     public  double getResult(){
         double result=0;
         result=get_numberA()+get_numberB();
         return result;
     }
}
//减法类
public class OperationSub extends Operation {

    @Override
    public double getResult(){
        double result=0.0;
        result=get_numberA()-get_numberB();
        return result;
    }
}
//乘法类
public class OperationRide extends Operation {

    @Override
    public double getResult(){
        double result=0.0;
        result=get_numberA()*get_numberB();
        return result;
    }
}

第三步:

创建一个properties配置文件,将“加减乘”类变成简单配置

JIA=OperationAdd
JIAN=OperationSub
CHENG=OperationRide

第四步:

修改工厂类  

//反射工厂
public class ReflexFactor {

    public static Operaction choose(String shortName){
        Operation operation=null;
        //从properties文件中读取shortName对应的完整包名
        Properties pro=new Properties();
        try {
            pro.load(new FileInputStream("src/Calculator.properties"));
            String fullName=pro.getProperty(shortName);
            
            //相当于代替工厂模式,直接将需要new的类写进去即可
            operation=(Operation) Class.forName(fullName).newInstance();//注意:如果找不到对应类,那么就得加上前面的路径  Class.forName("src."+fullName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return operation;
    }
}

 

最后测试:

public class Test {

    public static void main(String[] args) {
        Operation oper=new Operation();
        Scanner scan = new Scanner(System.in);
        boolean isok=true;
        while (isok) {
            System.out.println("请输入数字A:");
            double a=scan.nextInt();
            System.out.println("请输入运算符号(+、-、*、/):");
            String b=scan.next();
            System.out.println("请输入数字B");
            double c=scan.nextInt();
            
            oper=ReflexFactor.choose(b);
            oper.set_numberA(a);
            oper.set_numberB(c);
            System.out.println("结果等于:"+oper.getResult());
            System.out.println("是否继续(y/n)");
            String d=scan.next();
            if (d.equals("n")) {
                break;
            }
        }
        
        
    }
}

 

总结:修改后的工厂类,大大的减少了switch 判断,以后在加一个除法,只需要创建要给除法类,在配置文件加一个配置即可,不需要再修改工程类