简单的工厂模式(加减乘除计算)

具体可以分为:
(1).抽象产品(产品的特点)
(2).具体产品(产品的特点能做什么)
(3).工厂角色(能够是业务动态的选择产品的具体实现)
(4).客户端(就是客户进行操作的页面)
如图所示:工厂模式简化图(加减乘除)

工厂模式简化图(加减乘除)
如下是代码的案例:
抽象产品(产品的特点)

package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-01 23:55
 */
public abstract class Operation {
    private double num1;
    private double num2;
    private static Operation instance = new Operation() {
        @Override
        public double getResult() throws Exception {
            return 0;
        }
    };
    public double getNum1() {
        return num1;
    }

    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum2() {
        return num2;
    }

    public void setNum2(double num2) {
        this.num2 = num2;
    }
    public abstract  double getResult() throws Exception;
}

具体产品(产品的特点能做什么)

package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-02 00:04
 */
public class OperationAdd extends Operation {
    @Override
    public double getResult() throws Exception {
        return getNum1()+getNum2();
    }
}
package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-02 00:07
 */
public class OperationSub extends Operation {
    @Override
    public double getResult() throws Exception {
        return getNum1()-getNum2();
    }
}
package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-02 00:08
 */
public class OperationMul  extends Operation{
    @Override
    public double getResult() throws Exception {
        return getNum1()*getNum2();
    }
}
package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-02 00:08
 */
public class OperationDiv extends Operation {
    @Override
    public double getResult() throws Exception {
        if(getNum2()==0){
            System.out.println("被除数不能为0"+getNum2());
        }
        return getNum1()/getNum2();
    }
}

工厂角色(能够是业务动态的选择产品的具体实现)

package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-02 00:12
 */
public class OperationFactory {
   public static Operation operation=null;
   public static Operation createFactory(String opr){
       switch (opr){
           case "+":
               operation=new OperationAdd();
               break;
           case "-":
               operation=new OperationSub();
               break;
           case "*":
               operation=new OperationMul();
               break;
           case "/":
               operation=new OperationDiv();
               break;
           default:
               System.out.println("指令错误!");
               break;
       }
       return operation;
   }
}

客户端有两处代码,因为测试类中不易有很多的代码出现,所以直接抽出来一个类专门的对其测试进行总结
抽出来的处理类,如下:

package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-02 00:18
 */
public class OperationAll {

    public static void add(double num1, double num2) {
        String opr = "+";
        Operation of = OperationFactory.createFactory(opr);
        of.setNum1(num1);
        of.setNum2(num2);
        try {
            System.out.println("加法计算值:"+of.getResult());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void sub(double num1, double num2) {
        String opr = "-";
        Operation of = OperationFactory.createFactory(opr);
        of.setNum1(num1);
        of.setNum2(num2);
        try {
            System.out.println("减法计算值:"+of.getResult());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void mul(double num1, double num2) {
        String opr = "*";
        Operation of = OperationFactory.createFactory(opr);
        of.setNum1(num1);
        of.setNum2(num2);
        try {
            System.out.println("乘法计算值:"+of.getResult());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void div(double num1, double num2) {
        String opr = "/";
        Operation of = OperationFactory.createFactory(opr);
        of.setNum1(num1);
        of.setNum2(num2);
        try {
            System.out.println("除法计算值:"+of.getResult());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

测试类:

package factoryPattern;

/**
 * @version 1.0
 * @author: 小原
 * @date: 2021-06-02 00:26
 */
public class OperationTest {
    public static void main(String[] args) {
        OperationAll.add(3,2);
        OperationAll.sub(6,3);
        OperationAll.mul(2,4);
        OperationAll.div(7,5);
    }
}

运行结果如下
运行的结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值