简单工厂模式

实现一个简单的计算器功能,输入两个数字,再加一个操作符,最后得出结果。

实现逻辑,可以把每种操作符号抽象成对应的计算类,根据输入的数字得出结果。操作符的类可以使用简单工厂模式根据不同的类型生产不同的操作对象。

一、相关UML图

二、具体代码的实现

Operate类:

 1 package com.jas.pattern.simpleFactory;
 2 
 3 /**
 4  * <一句话描述>,
 5  * <详细介绍>,
 6  *
 7  * @author 琚安生
 8  * @since 设计wiki | 需求wiki
 9  */
10 public abstract class Operate {
11     private double num1;
12     private double num2;
13 
14     public abstract double calculate();
15 
16     public void setNum1(double num1) {
17         this.num1 = num1;
18     }
19 
20     public void setNum2(double num2) {
21         this.num2 = num2;
22     }
23 
24     protected double getNum1() {
25         return num1;
26     }
27 
28     protected double getNum2() {
29         return num2;
30     }
31 }

具体的实现的子类:

package com.jas.pattern.simpleFactory;

import java.math.BigDecimal;

/**
 * <一句话描述>,
 * <详细介绍>,
 *
 * @author 琚安生
 * @since 设计wiki | 需求wiki
 */
public class AddOperate extends Operate{
    @Override
    public double calculate() {
        BigDecimal num1 = new BigDecimal(getNum1());
        BigDecimal num2 = new BigDecimal(getNum2());
        BigDecimal res = num1.add(num2);
        return res.doubleValue();
    }
}
package com.jas.pattern.simpleFactory;

import java.math.BigDecimal;

/**
 * <一句话描述>,
 * <详细介绍>,
 *
 * @author 琚安生
 * @since 设计wiki | 需求wiki
 */
public class MultiOperate extends Operate{
    @Override
    public double calculate() {
        BigDecimal num1 = new BigDecimal(getNum1());
        BigDecimal num2 = new BigDecimal(getNum2());
        BigDecimal res = num1.multiply(num2);
        return res.doubleValue();
    }
}
package com.jas.pattern.simpleFactory;

import java.math.BigDecimal;

/**
 * <一句话描述>,
 * <详细介绍>,
 *
 * @author 琚安生
 * @since 设计wiki | 需求wiki
 */
public class SubOperate extends Operate{
    @Override
    public double calculate() {
        BigDecimal num1 = new BigDecimal(getNum1());
        BigDecimal num2 = new BigDecimal(getNum2());
        BigDecimal res = num1.subtract(num2);
        return res.doubleValue();
    }
}
package com.jas.pattern.simpleFactory;

import java.math.BigDecimal;

/**
 * <一句话描述>,
 * <详细介绍>,
 *
 * @author 琚安生
 * @since 设计wiki | 需求wiki
 */
public class DivOperate extends Operate{
    @Override
    public double calculate() {
        BigDecimal num1 = new BigDecimal(getNum1());
        BigDecimal num2 = new BigDecimal(getNum2());
        BigDecimal res = num1.divide(num2);
        return res.doubleValue();
    }
}

简单工厂:

package com.jas.pattern.simpleFactory;

/**
 * <一句话描述>,
 * <详细介绍>,
 *
 * @author 琚安生
 * @since 设计wiki | 需求wiki
 */
public class OperateFactory {
    public static Operate createOperate(String type){
        switch (type){
            case "+":
                return new AddOperate();
            case "-":
                return new SubOperate();
            case "*":
                return new MultiOperate();
            case "/":
                return new DivOperate();
            default: return null;
        }
    }
}

客户端代码:

package com.jas.pattern.simpleFactory;

/**
 * <一句话描述>,
 * <详细介绍>,
 *
 * @author 琚安生
 * @since 设计wiki | 需求wiki
 */
public class Calculator {
    public double calculate(double num1, double num2, String operateSign){
        Operate operate = OperateFactory.createOperate(operateSign);
        if (operate == null){
            return 0.0;
        }
        operate.setNum1(num1);
        operate.setNum2(num2);
        return operate.calculate();
    }
}

 

转载于:https://www.cnblogs.com/jas0/p/11089709.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值