c#设计模式==策略模式

来源:互联网 发布:linux清空文件内容 编辑:程序博客网 时间:2024/05/22 00:50

  策略模式,看完策略模式最大的感受就是将所有的算法封装起来,让它们之间可以相互替换,这个模式让算法的变化不会影响到使用者。

  我写的例子还是之前的那个简易计算器,策略模式可以和简单工厂模式结合,在客户端中只需认识一个concent类,将所有的算法对象创建以及算法的使用全部封装在一个类中,即concent,通过传入的操作符来创建不同的对象,然后用算法基类的对象访问不同子类的算法结果。



程序:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 策略模式{    class Program    {        static void Main(string[] args)        {            double a, b;            string opt;            Console.WriteLine("请输入一个数:");            a = Convert.ToDouble(Console.ReadLine());            Console.WriteLine("请输入运算符:");            opt = Console.ReadLine();            Console.WriteLine("请输入另一个数:");            b = Convert.ToDouble(Console.ReadLine());            Concent opter = new Concent(opt, a, b);            Console.WriteLine("结果为:" + opter.getresult());        }    }    class Concent    {        Opter opter;        public Concent(string opt, double a, double b)        {            switch (opt)            {                case "+":                    {                        opter = new ADDopter();                        break;                    }                case "-":                    {                        opter = new SUBopter();                        break;                    }                case "*":                    {                        opter = new MULopter();                        break;                    }                case "/":                    {                        opter = new DIVopter();                        break;                    }            }            opter.NUM1 = a;            opter.NUM2 = b;        }        public double getresult()        {            return opter.getresult();        }    }    abstract class Opter    {        private double num1, num2;        public double NUM1        {            get { return num1; }              set { num1 = value; }          }        public double NUM2        {            get { return num2; }            set { num2 = value; }        }        public abstract double getresult();    }    class ADDopter : Opter    {        public override double getresult()        {            return NUM1 + NUM2;        }    }    class SUBopter : Opter    {        public override double getresult()        {            return NUM1 - NUM2;        }    }    class MULopter : Opter    {        public override double getresult()        {            return NUM1 * NUM2;        }    }    class DIVopter : Opter    {        public override double getresult()        {            if (NUM2 == 0)            {                Console.WriteLine("除数不能为0");                return 0.0;            }            else            {                return NUM1 / NUM2;            }        }    }}


0 0
原创粉丝点击