设计模式-简单工厂模式-计算器

简单工厂模式及就是为了降低其内部的耦合,使得业务代码更加注重于业务,而且易于后期的维和。此处用一个简单的计算器实例来进行举例说明,
Operation类

package One;
/**
 * 抽象类,主要有一些所有运算共有的属性
 * @author 焦焱
 *
 */
public abstract class Operation {

    public double number_A = 0;
    public double number_B = 0;


    /**
     * 通过实现此方法来获取不同运算的结果
     * @return  结果
     */
    public abstract double GetResult();
}


/**
 * 加法类
 * @author 焦焱
 *
 */
class OperationAdd extends Operation{

    @Override
    public double GetResult() {
        return number_A+number_B;
    }

}
/**
 * 减法类
 * @author 焦焱
 *
 */
class OperationSub extends Operation{

    @Override
    public double GetResult() {
        return number_A-number_B;
    }

}
/**
 * 乘法类
 * @author 焦焱
 *
 */
class OperationMul extends Operation{

    @Override
    public double GetResult() {
        return number_A*number_B;
    }

}
/**
 * 除法类
 * @author 焦焱
 *
 */
class OperationDiv extends Operation{

    @Override
    public double GetResult() {
        if(number_B==0)
        {
            System.out.println("被除数不能为0");
            return -1;
        }
        return number_A/number_B;
    }

}



OperationFactory

/**
 * 运算工厂
 * @author 焦焱
 *
 */
public class OperationFactory {

public static Operation createOperation(String operationName)
{
    Operation oper = null;
    switch (operationName) {
    case "+":   
        oper = new OperationAdd();
        break;
    case "-":   
        oper = new OperationSub();
        break;
    case "*":   
        oper = new OperationMul();
        break;
    case "/":   
        oper = new OperationDiv();
        break;
    }
    return oper;
}
}

通过此类就可以通过运算符获取其对应的运算类
Main

public class Main {
public static void main(String[] args) {
    Operation oper;
    oper = OperationFactory.createOperation("/");
    oper.number_A=3;
    oper.number_B=4;
    System.out.println(oper.GetResult());
}
}

这样在后期扩展的时候,只需要在继承Operation 类书写一个运算类,然后在Factory里面加上一条分支即可,这样的代码易于维护,扩展,并且在扩展的时候不会影响到其他的已经写好的运算。
此代码的UML建模图为
这里写图片描述
可以看出此模式的核心在于工厂类以及,工厂加工对象他们的共有类的定义,如果可以定义一个好的基类,就可以免去大量的代码,而且使得代码的重用性,可维护性,可扩展性都大大提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值