设计模式之:简单工厂模式

        简单工厂模式太简单了,简单地连GOF23种设计模式里都不愿意收录它,但是我们还得从它来理解工厂模式。

 

using System;

namespace OperateFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            //4.使用工厂类产生实例
            Operate operate = OperateFactory.GetInstance('+');
            operate.N1 = 3.14;
            operate.N2 = 2;

            Console.WriteLine(operate.GetResult());

            //5.最后,我们传参时传不同的参,比如参数为'-',就可以不改动一句代码,实现不同的运算,得到不同的结果。
        }
    }
    /// <summary>
    /// 1.先建立一个运算类,是加减乘除余等运算的父类
    /// </summary>
    public abstract class Operate
    {
        public double N1 { get; set; }
        public double N2 { get; set; }
        //抽象类的抽象方法(可以没有方法地实现)
        public abstract double GetResult();
    }

    /// <summary>
    /// 2.建立N个子类,继承Operate
    /// </summary>
    public class AddOperate : Operate
    {
        public override double GetResult()
        {
            return N1 + N2;
        }
    }

    /// <summary>
    /// 子类2
    /// </summary>
    public class SubOperate : Operate
    {
        public override double GetResult()
        {
            return N1 - N2;
        }
    }
    /// <summary>
    ///  3.构建简单工厂类,包含一个返回子类实例的方法.这样通过父类对象指向子类的实例,达到加减乘除不同的结果,这是典型的多态的使用方法。
    /// </summary>
    public class OperateFactory
    {
        //一般用静态方法,由此得名静态工厂
        public static Operate GetInstance(char c)
        {
            Operate o = null;
            switch (c)
            {
                case '+':
                    o = new AddOperate();
                    break;
                case '-':
                    o = new SubOperate();
                    break;
                default:
                    o = null;
                    break;
            }
            return o;
        }
    }
}

倒数第2要补充的:

子产品(子类)里没有判断(到底是生产哪个产品)语句,判断是在工厂里判断的;

工厂生产产品,所以工厂有个返回子类类型的方法。

在主程序里用多态:基类 o=工厂.get类(参数);    //注意工厂这个方法返回的是子类对象(这就是关键所在,你可以认为是这个工厂的厂花……这样能惦记住了吧?)

最后:

构建简单工厂类的时候,利用多态,我们可以三种方法实现简单工厂类:

No1 使用静态方法,从而使用静态类,然后可以实现方法也可以不实现;

No2 使用virtual方法,必须有实现;

No3 使用接口,不能有实现。

你可能感兴趣的:(设计模式,工厂模式)