zoukankan      html  css  js  c++  java
  • java 工厂模式

    1.工厂模式

    工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

    需求:实现一个简单的加减乘除计算器  

    第一步:

    //运算类
    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 OperationFactor {
        
        public static Operation createOperation(String operation){
            Operation  oper=null;
            switch (operation) {
            case "+":
                oper=new OperationAdd();
                break;
            case "-":
                oper=new OperationSub();
                break;
            default:
                break;
            }
            return oper;
        }
    
    }

    最后测试:

    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=OperationFactor.createOperation(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里面添加一个判断即可,也说明了一点每加一个算法就得重复改动工厂类,如果有一百种算法那么就改100次,所以为了优化工厂模式,可以使用   “反射模式” 可解决此问题

  • 相关阅读:
    Windows监视器SSM应用手册
    300 Professional WordPress Themes Of 2012
    android TextWatcher
    Android save pictrue by SQLiteOpenHelper
    Android Animation
    android getResources
    我会 背诗哦
    android:imeOptions
    android ViewStub Note
    Android log analysis
  • 原文地址:https://www.cnblogs.com/fxd980519/p/9372103.html
Copyright © 2011-2022 走看看