设计模式-简单工厂设计模式

工作刚好一年了,现在想要提高一下自己的编码水平,能够进行系统的需求分析,以及参与项目代码的设计,特意查找了设计模式相关的文章书籍进行学习,并做下记录以备以后温习。

需求:设计一个计算器的软件,计算器有加减等计算的功能

设计思路:1、计算器的功能就是计算,但是计算的方法有很多种,所以将计算这个功能设计为接口。

                 2、创建加减乘除等具体的实例继承计算接口。

                 3、创建工厂里面根据参数创建对应的对象。

                 4、客户端创建工厂对象,然后调用计算方法。

代码:

功能接口

interface ICalcInterFace
{
    int Calculate(int a, int b);
}

接口的具体实例:

class Subtract : ICalcInterFace
{
     public int Calculate(int a, int b)
     {
         if (a >= b)
         {
             return a - b;
          }
          else return b - a;
     }
}
class Add : ICalcInterFace
{
    public int Calculate(int a,int b)
    {
        return a + b;
    }
}

创建工厂:

enum CalcType
{
    Add = 1,
    Subtract = 2
}
class CalcFactory
{
    public ICalcInterFace CerateCalcIntance(CalcType calcType)
    {
        ICalcInterFace CalcInterFace = null;
        switch (calcType)
        {
            case CalcType.Add: CalcInterFace = new Add(); break;
            case CalcType.Subtract: CalcInterFace = new Subtract(); break;
            default: break;
        }
        return CalcInterFace;
    }
}

客户端:

CalcFactory calcFactory = new CalcFactory();
ICalcInterFace add = calcFactory.CerateCalcIntance(CalcType.Add);
int result = add.Calculate(1,2);
对代码进行封装,客户端不需要知道具体的类,只需要调用公开的方法即可。但是,该设计模式扩展性不是很好,比如后面还要增加乘、除功能,那么除了需要增加乘、除的具体类之外还必须修改工厂类,违背了OCP原则----对扩展开放,对修改关闭


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值