大话设计模式之简单的工厂模式

通过面向对象的三大特征封装、继承和多态,简单的计算器代码实现


Operation运算类,这是一个父类,所有运算方法都继承此类。

public abstract class Operation {

    public BigDecimal numberA;

    public BigDecimal numberB;

    public BigDecimal getNumberA() {
        return numberA;
    }

    public void setNumberA(BigDecimal numberA) {
        this.numberA = numberA;
    }

    public BigDecimal getNumberB() {
        return numberB;
    }

    public void setNumberB(BigDecimal numberB) {
        this.numberB = numberB;
    }

    public abstract BigDecimal getResult();
}

这是一个抽象的类,里面有一个抽象的方法getResultI(),和两个Number属性。之所以使用抽象类,是因为继承抽象类,必须重写抽象类的抽象方法,通过子类实现计算功能。


OperationAdd 加法类,继承运算类

public class OperationAdd extends Operation {

    public BigDecimal getResult(){

        BigDecimal result = null;

        result = numberA.add(numberB);

        return result;
    }

}

OperationSubtract 减法类,继承运算类

public class OperationSubtract extends Operation {

    public BigDecimal getResult(){

        BigDecimal result = null;

        result = numberA.subtract(numberB);

        return result;
    }

}

OperationMultiply 乘法类,继承运算类

public class OperationMultiply extends Operation {

    public BigDecimal getResult(){

        BigDecimal result = null;

        result = numberA.multiply(numberB);

        return result;
    }

}

OperationDivide 除法类,继承运算泪

public class OperationDivide extends Operation {

    public BigDecimal getResult(){

        BigDecimal result = null;

        result = numberA.divide(numberB);

        return result;
    }

}

简单的工厂模式,就是用一个单独的类来做实例化对象的过程,这就是工厂,来,让我们看看工厂类怎么写。

OperationFactory 简单的运算工厂类

public class OperationFactory {

    public Operation createOperation(String optrate){

        Operation operation = null;

        switch (optrate) {
        case "+":

            operation = new OperationAdd();

            break;
        case "-":

            operation = new OperationSubtract();

            break;
        case "*":

            operation = new OperationMultiply();

            break;
        case "/":

            operation = new OperationDivide();

            break;

        default:
            break;
        }

        return operation;
    }

}

这样子,只需要输入运算符号,工厂就会实例化出合适的对象,通过多态,返回父类的方法实现了计算器的结果。


最后写一个Main方法实现计算功能

public class Main {

    public static void main(String[] args) {

        OperationFactory operationFactory = new OperationFactory();

        Operation operation = operationFactory.createOperation("*");

        operation.setNumberA(new BigDecimal("10"));
        operation.setNumberB(new BigDecimal("0.0058"));

        BigDecimal result = operation.getResult();

        System.out.println(result);
    }

}

如果以后需要更改加法运算,只需要改OperationAdd这个类就可以,需要添加各种复杂的运算,只需要添加相应的运算子类就可以,然后在修改运算类工厂,在switch中添加分支。

这样一个简单的工厂模式就实现了,这里面用到了面向对象的三大特征:封装一个抽象的运算父类,所以的算法类全部继承父类,通过算法工厂,多态的实例化出合适的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值