【设计模式】简单工厂模式

该博客介绍了一个使用面向对象和简单工厂模式实现的计算器控制台程序。代码包括抽象运算类`AbstractOperation`,加法运算子类`OperationAdd`,以及运算工厂类`OperationFactory`。测试代码`Main.java`展示了如何通过工厂创建运算对象并进行计算。修改或增加运算只需改动对应子类和工厂类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用面向对象的思想是实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果

类图

在这里插入图片描述

工程目录

新建一个Java控制台程序即可

在这里插入图片描述

代码

AbstractOperation.java

package com.company.pattern.demo01;

/**
 * show 运算类
 * @author Blazar
 */
public abstract class AbstractOperation {
    private double numberA;
    private double numberB;

    /**
     * 得到运算结果
     * @author blazar
     * @return 运算结果
     */
    public abstract double getResult();

    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;
    }
}

OperationAdd.java

package com.company.pattern.demo01;

/**
 * 加法
 * @author blazar
 */
public class OperationAdd extends AbstractOperation{
    @Override
    public double getResult() {
        double result=0;
        result = getNumberA()+getNumberB();
        return result;
    }
}

OperationFactory.java

package com.company.pattern.demo01;

/**
 * 简单运算工厂类
 */
public class OperationFactory {
    public static AbstractOperation createOperation(String operation){
        AbstractOperation oper = null;
        switch(operation){
            case "+":
                oper = new OperationAdd();
                break;
            case "-":
                oper = new OperationSub();
                break;
            case "*":
                oper = new OperationMul();
                break;
            case "/":
                oper = new OperationDiv();
                break;
        }
        return oper;
    }
}

测试代码 Main.java

package com.company.pattern.demo01;

/**
 * @author blazar
 */
public class Main {

    /**
     * 简单工厂模式
     * 用面向对象的思想是实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果
     */
    public static void main(String[] args) {
	// write your code here
        try{
            AbstractOperation oper = OperationFactory.createOperation("+");

            oper.setNumberA(1.5);
            oper.setNumberB(1.2);

            System.out.println(oper.getResult());
        }
        catch(Exception ex){
            System.out.println("输入格式错误: "+ex.getMessage());
        }
    }
}

变化点

修改

  1. 如果是需要更改加法运算,只需要修改运算子类OperationSub.java就可以了;

新增

  1. 如果是需要增加运算,如平方根的计算,需要两步:第一步,增加对应的运算子类;第二步,修改运算类工厂,在switch中添加分支;

参考《大话设计模式》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值