设计模式-简单工厂模式

设计模式-简单工厂模式

一个简单的计算器

1.首先写一个运算类Operation类

java 复制代码
public class Operation{
    private double _numberA = 0;
    private double _numberB = 0;
    public double NumberA
    {
        get {return _numberA;}
        set {_numberA = value;}
    }
    public double NumberB
    {
        get {return _numberB;}
        set {_numberB = value;}
    }
    public virtual double GetResult()
    {
    	double result = 0;
        return result;
    }
}

2.加减乘除类

java 复制代码
class OperationAdd : Operation //加法类,继承运算类
{
    public override double GetResult(){
        double result = 0;
        result = NumberA + NumberB;
        return result;
    }
}
class OperationSub : Operation //减法类,继承运算类
{
    public override double GetResult(){
        double result = 0;
        result = NumberA - NumberB;
        return result;
    }
}
class OperationMul : Operation //乘法类,继承运算类
{
    public override double GetResult(){
        double result = 0;
        result = NumberA * NumberB;
        return result;
    }
}
class OperationDiv : Operation //除法类,继承运算类
{
    public override double GetResult(){
        double result = 0;
        if(NumberB == 0)
            throw new Exception("除数不能为0。");
        result = NumberA / NumberB;
        return result;
    }
}

3.简单工厂模式

java 复制代码
public class OperationFactory
{
    public static Operation createOperate(string operate){
       Operation oper = null;
       switch(operate){
           case "+":
               oper = new OperationAdd();
               break;
           case "-":
               oper = new OperationSub();
               break;
           case "*":
               oper = new OperationMul();
               break;
           case "/":
               oper = new OperationDiv();
               break;
       }
       return oper;
    }
}

客户端调用

java 复制代码
Operation oper;
oper = OperationFactory.createOperate("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();

简单工厂模式的好处

复制代码
1.之后要增加运算,只需要增加OperationXXX即可
2.之后要改某个运算,只需要修改OperationXXX即可
相关推荐
派大鑫wink34 分钟前
【Day34】Servlet 进阶:会话管理(Cookie vs Session)
java·开发语言·学习方法
多米Domi01138 分钟前
0x3f 第35天 电脑硬盘坏了 +二叉树直径,将有序数组转换为二叉搜索树
java·数据结构·python·算法·leetcode·链表
zqmattack1 小时前
SQL优化与索引策略实战指南
java·数据库·sql
crossaspeed1 小时前
Java-线程池(八股)
java·开发语言
带刺的坐椅1 小时前
又一个项级的 Java Multi Agent 开源项目
java·ai·agent·solon·智能体
Voyager_42 小时前
StringRedisTemplate 和 RedisTemplate 的区别是什么?
java·spring boot
杏花春雨江南2 小时前
JavaWeb企业级项目实战:从SSH到SSM演进 + MQ/Redis/ES高可用架构落地全复盘(实战干货+避坑指南)
java·jvm·spring
UR的出不克2 小时前
使用 Python 爬取 Bilibili 弹幕数据并导出 Excel
java·python·excel
短剑重铸之日2 小时前
《7天学会Redis》特别篇: Redis分布式锁
java·redis·分布式·后端·缓存·redission·看门狗机制
独自破碎E2 小时前
说说Java中的反射机制
java·开发语言