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