设计模式 — 简单工厂模式

  简单工厂模式是设计模式的开始,也是比较简单基础的模式用法,就来总结下“简单工厂模式的用法”

(1)优点:

  实现了对象创建和客户端分离(业务和界面分离) 。

  减少了代码的冗余度和复杂性,直接把所需要的业务封装起来,然后直接按调用就可以了,大大提高了系统的灵活性。

(2)缺点

  在工厂类中集中了所有产品的创建逻辑,职责过重,一旦不能正常工作吗,整个系统都要受影响。

  系统在扩展的时候比较困难,因为使用了静态的工厂方法,造成工厂角色无法形成继承等级的结构,所以工厂类不能得到很好地扩展。

2.简单工厂模式:

3.业务的封装

//把运算封装成一个类 
public class Operation
    {
        public static double GetResult(double numberA, double numberB, string operate)  
        {
            double result = 0d;

            switch (operate)
            {
                case "+":
                    result = numberA + numberB;
                    break;
                case "-":
                    result = numberA - numberB;
                    break;
                case "*":
                    result = numberA * numberB;
                    break;
                case "%":
                    result = numberA % numberB;
                    break;

            }
            return result;
        }
        

    }

客户端的实现:

static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("请输入数字A:");
                string strNumberA = Console.ReadLine();

                Console.Write("请选择运算符号(+,-,*,%)");
                string strOperate = Console.ReadLine();

                Console.WriteLine("请输入数字B:");
                string strNumberB = Console.ReadLine();

                string strResult = "";
                strResult = 
                Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA), 
                Convert.ToDouble(strNumberB ), strOperate));
                Console.WriteLine("结果是:"+ strResult);


            }
            catch (Exception ex)
            {
                Console.WriteLine("您的输入有错:" + ex.Message);
            }

(这样的写法,把算法给封装起来,就会完全的把业务和界面给分离)。

              -----------------------------------------------------------------------------------------------------------------------------

2.算法的分离(简单工厂模式)

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;
        }

    }

加减乘除类:

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 OperationDiy : Operation  //除法运算
    {
        public override double GetResult()
        {
            double result = 0;
            if (NumberB == 0)         
                throw new Exception("除数不能为零0,。");
            return result;
        }
    }

简单工厂模式:

(1)简单运算工厂类

 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;
        }
    }

(2)客户端代码

            Operation oper;
            oper = OperationFactory.createOperate("+");
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result = oper.GetResult();
        

(如果我们需要更改运算符号的好,那我们直接在 OperationAdd运算类里修改就可以了).

猜你喜欢

转载自blog.csdn.net/M_hcCSDN/article/details/94214790