简单工厂模式

据说简单工厂模式不算是Gof中的的设计模式。。。

例子:计算器,计算加减乘除,后期可方便的添加其他运算类型

1.一般上来可能不考虑面向对象,直接一顿if else,类似这种,可以考虑一下,如果为了方便拓展,一定看一下判断里面有没有相同的类似的类型。

2.考虑抽象要

 

 

下面是不考虑面向对象,面向过程:

    public enum OperationType
    {
        jia,
        jian,
        cheng,
        chu
    }

    public class Operation
    {
        public double GetResult(double num1,double num2,OperationType operationType)
        {
            switch (operationType)
            {
                case OperationType.jia:
                    return num1 + num2;
                case OperationType.jian:
                    return num1 - num2;
                case OperationType.cheng:
                    return num1 * num2;
                case OperationType.chu:
                    return num1 / num2;
                default:
                    throw new Exception("没有这种类型");
            }
        }
    }

 

改进:

 

四个运算可以抽象出一个父类,计算类,因为大家都是类似,给两个数,求结果

如下

 public class OperationFather
    {
        public double NumOne { get; set; }
        public double NumTwo { get; set; }
        public virtual double GetResult()
        {
            return 0;
        }
    }

然后就是各个子类

    public class Chu : OperationFather
    {
        public override double GetResult()
        {
            return NumOne / NumTwo;
        }
    }
    public class Cheng : OperationFather
    {
        public override double GetResult()
        {
            return NumOne * NumTwo;
        }
    }
   public class Jia:OperationFather
    {
        public override double GetResult()
        {
            return NumOne+NumTwo;
        }
    }

 

    public class Jian : OperationFather
    {
        public override double GetResult()
        {
            return NumOne - NumTwo;
        }
    }

然后有了直接,需要一个工厂创造,顶替if else,转移到工厂里面

    public class OperationFactory
    {
        public static OperationFather CreateOperation(OperationType operationType)
        {
            OperationFather operationFather = null;
            switch (operationType)
            {
                case OperationType.jia:
                    operationFather = new Jia();
                    break;
                case OperationType.jian:
                    operationFather = new Jian();

                    break;
                case OperationType.cheng:
                    operationFather = new Cheng();

                    break;
                case OperationType.chu:
                    operationFather = new Chu();

                    break;
                default:
                    break;
            }
            return operationFather;
        }

    }

这时候调用就很简单了,主界面的代码就简单了

 OperationFather operationFather = OperationFactory.CreateOperation(OperationType.jia);
            operationFather.NumOne = num1;
            operationFather.NumTwo = num2;
            double result2= operationFather.GetResult();


            Console.WriteLine(result2);
            Console.ReadKey(true);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值