码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2017-04-08 17:37:24      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:操作符   oid   double   res   ack   extends   ext   int   并且   

通过封装,继承,多态将程序的耦合性降低,让程序容易修改并且易于复用。

假设实现一个简单的计算器程序,输入两数A,B,还有操作符,计算结果。

考虑了扩展,可能会这么写:

创建一个操作符父类,其他的操作符继承于它,并且重写方法:

package com.lin.simplefactory;

/**
 * 操作符父类
 * @author lin
 *
 */
public class Operation {
    
    private double numberA = 0;
    private double numberB = 0;
    
    public double getNumberA() {
        return numberA;
    }
    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }
    public double getNumberB() {
        return numberB;
    }
    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }
    /**
     * 获取结果
     * @return double
     */
    public double getResult(){
        double result = 0;
        return result;
    }
}

创建加法子类和减法子类:

package com.lin.simplefactory;

public class OperationAdd extends Operation {

    @Override
    public double getResult() {
        // TODO 获取加法运算结果
        double result = 0;
        result = this.getNumberA()+this.getNumberB();
        return result;
    }
    
}


package com.lin.simplefactory;

public class OperationSub extends Operation {

    @Override
    public double getResult() {
        // TODO 获取减法运算结果
        double result = 0;
        result = this.getNumberA()-this.getNumberB();
        return result;
    }
    
}

这个时候,假如有一个类,可以帮助我们根据用户输入的操作符进行运算符实例化,那么我们就不需要在客户端进行判断了:

创建一个简单的工厂类:

package com.lin.simplefactory;

/**
 * 简单工厂
 * @author lin
 *
 */
public class OperationFactory {
    
    /**
     * 根据操作符进行实例化
     * @param op
     * @return Operation
     */
    public static Operation createOperation(String op){
        
        Operation operation = null;
        
        switch (op) {
        
        case "+":
            operation =  new OperationAdd();
            break;
        case "-":
            operation = new OperationSub();
            break;
        default:
            break;
            
        }
        
        return operation;
    }
}

有了工厂类之后,我们的客户端就可以使用利用多态进行运算操作:

package com.lin.simplefactory;

/**
 * 计算测试
 * @author lin
 *
 */
public class OperationMain {
    
    public static void main(String[] args) {
        
        double result = 0;
        
        //加法运算
        Operation operation  = OperationFactory.createOperation("+");
        operation.setNumberA(1);
        operation.setNumberB(2);
        result = operation.getResult();
        System.out.println("result = " + result);
        
        //减法运算
        operation  = OperationFactory.createOperation("-");
        operation.setNumberA(1);
        operation.setNumberB(2);
        result = operation.getResult();
        System.out.println("result = " + result);
    }
}

简单工厂模式至此:当我们需要增加各种各样运算操作的时候,只要需要增加子类,并且到工厂类里面进行switch分支的修改便可。

 

简单工厂模式

标签:操作符   oid   double   res   ack   extends   ext   int   并且   

原文地址:http://www.cnblogs.com/my-java-code/p/6682033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!