第二章 策略模式
上一篇的简单工厂模式能够实现业务和逻辑相分离,但是每次添加新的业务逻辑的时候都要去修改它的工厂然后编译,那怎么才能做到添加业务而不编译呢?—策略模式
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(); } }