C#多态练习--简单工厂模式

今天,我们来试下C#的工厂模式:先来说下简单工厂模式:比如,生产汽车,汽车有很多车型,小汽车,SUV,MVP等,我们可以抽象出来一个它们的基类,比如都有灯,发动机等等通用的,然后我们让不同车型继承它们的基类,在我们需要生产哪种车型的时候,我们根据条件来生产不同车型。

说完概念,我们来个实例,计算机,根据输入的符号(加减乘除)来进行不同的运算,首先,我们要有个基类,如,需要两个数,一个返回的方法:

 /// <summary>
        /// 抽象父类方法
        /// </summary>
        public abstract class CalFather {

            public double One {
                get;
                set;
            }
            public double Two
            {
                get;
                set;
            }
            public CalFather(double n1,double n2) {
                this.One = n1;
                this.Two = n2;
            }
            //计算方法
            public abstract double GetResult();

然后我们有加减两个运算,我们就需要两个继承父类的子类:

/// <summary>
    /// 加法计算
    /// </summary>
        public class Add:CalFather{
    
            public Add(double n1,double n2):base(n1,n2){}

            public override double GetResult(){
            
                return this.One+this.Two;
            }
        }

        /// <summary>
        /// 减法计算
        /// </summary>
        public class Sub : CalFather
        {

            public Sub(double n1, double n2) : base(n1, n2) { }

            public override double GetResult()
            {

                return this.One - this.Two;
            }
        }
    

然后,我们来“生产工厂”进行生产,根据传进来的条件,生产不同“车型”:

 public static CalFather GetResult(string a,double n1,double n2) {

            CalFather cf = null;
            switch(a){
                case "+":
                    cf = new Add(n1,n2);
                   
                    break;
                case "-":
                    cf = new Sub(n1, n2);
                    break;
            }
            return cf;
        }

上面,我们会根据swith条件来返回不同的子类,然后在返回的子类里调用方法,返回结果:

static void Main(string[] args)
        {
            while (true) {
                Console.WriteLine("请输入第一个数字:");
                double n1 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("请输入第二个数字:");
                double n2 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("请输入符号:");
                string a = Console.ReadLine();
                CalFather cf = GetResult(a, n1, n2);
                Console.WriteLine("结果为:{0}", cf.GetResult());
                Console.ReadKey();
            }

到此结束,代码不复杂,在于理解工厂模式

完整代码:

 class Program
    {
        static void Main(string[] args)
        {
            while (true) {
                Console.WriteLine("请输入第一个数字:");
                double n1 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("请输入第二个数字:");
                double n2 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("请输入符号:");
                string a = Console.ReadLine();
                CalFather cf = GetResult(a, n1, n2);
                Console.WriteLine("结果为:{0}", cf.GetResult());
                Console.ReadKey();
            }
        }

        public static CalFather GetResult(string a,double n1,double n2) {

            CalFather cf = null;
            switch(a){
                case "+":
                    cf = new Add(n1,n2);
                   
                    break;
                case "-":
                    cf = new Sub(n1, n2);
                    break;
            }
            return cf;
        }

        /// <summary>
        /// 抽象父类方法
        /// </summary>
        public abstract class CalFather {

            public double One {
                get;
                set;
            }
            public double Two
            {
                get;
                set;
            }
            public CalFather(double n1,double n2) {
                this.One = n1;
                this.Two = n2;
            }
            //计算方法
            public abstract double GetResult();
        }
    /// <summary>
    /// 加法计算
    /// </summary>
        public class Add:CalFather{
    
            public Add(double n1,double n2):base(n1,n2){}

            public override double GetResult(){
            
                return this.One+this.Two;
            }
        }

        /// <summary>
        /// 减法计算
        /// </summary>
        public class Sub : CalFather
        {

            public Sub(double n1, double n2) : base(n1, n2) { }

            public override double GetResult()
            {

                return this.One - this.Two;
            }
        }
    
    }

猜你喜欢

转载自blog.csdn.net/qwqwdf/article/details/80322457
今日推荐