第二章 策略模式

上一篇的简单工厂模式能够实现业务和逻辑相分离,但是每次添加新的业务逻辑的时候都要去修改它的工厂然后编译,那怎么才能做到添加业务而不编译呢?—策略模式

 public abstract class Operation
    {
        public abstract string GetResult();
    }

    class OperationA : Operation
    {
        public OperationA(int _basicsalary)
        {
            this.basicsalary = _basicsalary;
        }

        private int basicsalary;

        public int BasicSalary
        {

            get { return basicsalary; }

            set { basicsalary = value; }

        }

        public override string GetResult()
        {
            string Salary = String.Empty;
            Salary = (BasicSalary * 0.1 + BasicSalary).ToString();
            return Salary;
        }
    }



    class OperationB : Operation
    {
        public OperationB(int _basicsalary)
        {
            this.basicsalary = _basicsalary;
        }
        private int basicsalary;

        public int BasicSalary
        {

            get { return basicsalary; }

            set { basicsalary = value; }

        }

        public override string GetResult()
        {
            string Salary = String.Empty;
            Salary = (BasicSalary * 0.2 + BasicSalary).ToString();
            return Salary;
        }

    }



    class OperationC : Operation
    {
        public OperationC(int _basicsalary)
        {
            this.basicsalary = _basicsalary;
        }
        private int basicsalary;

        public int BasicSalary
        {

            get { return basicsalary; }

            set { basicsalary = value; }

        }
        public override string GetResult()
        {
            string Salary = String.Empty;

            Salary = (BasicSalary * 0.3 + BasicSalary).ToString();

            return Salary;
        }

    }

    class OperationD : Operation
    {
        public OperationD(int _basicsalary)
        {
            this.basicsalary = _basicsalary;
        }
        private int basicsalary;

        public int BasicSalary
        {

            get { return basicsalary; }

            set { basicsalary = value; }

        }
        public override string GetResult()
        {

            string Salary = String.Empty;

            Salary = (BasicSalary * 0.4 + BasicSalary).ToString();

            return Salary;

        }
    }

    class Context
    {
        Operation oper;
        public Context(Operation oper)
        {
            this.oper = oper;
        }

        public string OperationMether()
        {
            return oper.GetResult();
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            Console.WriteLine("请输入底薪:");
            int BasicSalary = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入部门:");
            string Department = Console.ReadLine();
            Context objcontext = null;
            switch (Department)
            {
                case "a":
                    objcontext = new Context(new OperationA(BasicSalary));
                    break;
                case "b":
                    objcontext = new Context(new OperationB(BasicSalary));
                    break;
                case "c":
                    objcontext = new Context(new OperationC(BasicSalary));
                    break;
                case "d":
                    objcontext = new Context(new OperationD(BasicSalary));
                    break;
                default:
                    break;
            }
            Console.WriteLine("您的薪水是:{0}RMB", objcontext.OperationMether());

            Console.ReadKey();
        }
    }
posted @ 2010-08-13 16:17  吴蒋  阅读(304)  评论(0编辑  收藏  举报