Java工厂设计模式(简单计算器实现)

总体的目录结构如下

1.基础工厂类

public interface BaseFactory {

}

2.拓展工厂类

public class OperationFactoryimplements BaseFactory{

    /**
     * 工厂类的本质是帮助判断对应的实例,将这种判断放在工厂当中,那么就节省了让操作类自己来进行操作的性能判断,这是使用多态来解决父类和子类之间的差异
     *
     * @param operation
     * @return
     */
    public static Operation createOperation(String operation) {

        Operation oper =null;

        switch (operation) {

            case "+":

                oper =new OperationAddServiceImpl();

                break;

            case "-":

                oper =new OperationSubServiceImpl();

                break;

            case "*":

                oper =new OperationMulServiceimpl();

                break;

            case "/":

                oper =new OperationDivServiceImpl();

                break;

        }

        return oper;

    }

}

3.基础操作类

public class Operation {

    protected DoublenumberA;

    protected DoublenumberB;

    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
     */

    public Double getResult() {

        Double result =0D;

        return result;

    }

}

4.加法Service

public interface OperationAddService {

    /**
     * 两个数相加
     *
     * @return
     */
    Double getResult();

}

5.除法Service

public interface OperationDivService {

    /**
     * 两数相除得到的结果
     *
     * @return
     */
    Double getResult();

}

6.乘法Service

public interface OperationMulService {

    /**
     * 两个数相乘的结果
     *
     * @return
     */
    Double getResult();

}

7.减法Service

public interface OperationSubService {

    /**
     * 两个数的减法
     *
     * @return
     */
    Double getResult();

}

8.加法ServiceImpl

public class OperationAddServiceImplextends Operationimplements OperationAddService {

    @Override

    public Double getResult() {

        Double result =0D;

        result =numberA +numberB ;

        return result;

    }

}

9.除法ServiceImpl

public class OperationDivServiceImplextends Operationimplements OperationDivService {

    @Override

    public Double getResult() {

        Double result =0D;

        if (numberB ==0){

            throw new LogicalException("除数不能为0");

        }

        result =numberA /numberB ;

        return result;

    }

}

10.减法ServiceImpl

public class OperationSubServiceImplextends Operationimplements OperationSubService {

    @Override

    public Double getResult() {

        Double result =0D;

        result =numberA -numberB ;

        return result;

    }

}

11.Controller层

@Controller
public class OperationController {

    @Autowired

    OperationServiceoperationService;

    @RequestMapping("/index")

    public String index(){

        return "login";

    }

    @RequestMapping("/calculate")

    public String operation(Model model, Double numberA , Double numberB , String operation){

        Operation oper;

        oper = OperationFactory.createOperation(operation);

        oper.setNumberA(numberA);

        oper.setNumberB(numberB);

        model.addAttribute("result",oper.getResult());

        return "login";

    }

}

12.使用freemarker来作为前端展示

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>页面</title>

<body>

<form action="/calculate" method="post" >

    numberA:<input type="text" size="30" name="numberA"><br>

    numberB:<input type="text" size="30" name="numberB"><br>

    <select class="form-control" name="operation" id="state">

        <option value="+">+</option>

        <option value="-">-</option>

        <option value="*">*</option>

        <option value="/">/</option>

    </select><input type="submit" value="comfirm"><br>

    结果:<input type="text" value="${(result)!""}" readonly>

</form>

</body>

</html>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励