【DM】设计模式再回顾---简单工厂模式

本文通过计算器实例详细介绍了简单工厂模式的概念及其应用。该模式通过一个简单的工厂类来创建各种运算对象,实现运算逻辑的解耦。

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

写在前面的

  • 学习完设计模式也有很长一段时间了,在这段时间中随着自己经验的一些积累,对于之前似懂非懂的设计模式有了一些新的看法,就决定把之前所学的重新再整理一遍,帮助自己再进行一次提高,就从简单工厂模式重新开始我自己的设计模式之旅。

  • 本系列参考资料《大话设计模式》程杰 著

简单工厂

概念

  • 首先,我们需要明白一个概念,所有的设计模式都遵循高内聚,低耦合的原则,让所写的代码符合OOP的规范,从而达到开放–封闭的标准。

  • 接下来我们来谈一谈简单工厂。“工厂”顾名思义就是生产东西的地方,你给予了工厂一些原材料,那么“工厂”就会按照内部的一些“方法”来把这些原料加工出来,给你想要的东西。下面我们看一下简单工厂的UML图例:

    这里写图片描述

具体实例

  • 我们以计算器为设计实例
    首先, 我们需要编写的是运算类,按照UML图的关系,这个运算类应该属于“父类”,代码如下:
Public class Operation
{
    //由于编写习惯,一般私有变量都会在前面加上下划线
    private double _numA=0;
    private double _numB=0;

    public double NumberA
    {
        get;set;
        //低版本的VS不能识别这样的写法
    }
    public double NumberB
    {
        get;set;
    }
    public virtual double GetResult()
    {
        //virtual 表示该父类的方法可以被重写
        double result=0;//初始化方法
        return result;
    }
}

然后,再编写具体的运算类,按照UML图的关系,其应属于“子类”,代码如下:

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("除数不能为零!")
        result=NumberA/NumberB
        return result;
    }
}
  • 最后,我们编写简单工厂类,然后创造出加工方法,方便终端使用,代码如下:
public class OperationFactory
{
    public static Operation createOperate(string operate)
    {
        //根据UML图,需要在简单工厂类中使用刚才的运算类
        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;
    }
}
  • 接下来,我们来建立终端代码,也就是原料的装入口,代码如下:
 static void Main(string[] args)
 {
     Operation oper; 
     oper= OperationFactory.creatOperate("/"); 
     //实例化并让工厂根据录入的参数选择加工方法
     oper.NumberA=5;
     oper.NumberB=9;
     double result=oper.GetResult();
 }

总结

  • 和文章开头所讲的一样,简单工厂只是OOP的一个非常明了的缩影,这个小例子非常好的阐述了解耦合的思想,如果我们需要再添加一些新的运算符号时,就不用对整个代码“大刀阔斧”,只需要对有限的几个工具类进行修改就好了

  • 看完所有的代码和UML图,我觉得自己对于这一次的回顾首先有了很大的感悟,因为没有了当初的晦涩,接下来就剩下融会贯通了。

TO BE CONTINUE……

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值