您的位置:首页 > 其它

设计模式之策略模式

2010-11-18 13:50 295 查看
策略模式:封装了变化,在context类的内部实现业务逻辑,UI层无需知道具体的逻辑

public class Operation
{
private double num1;
private double num2;

public  double Num1
{
get {
return num1;
}
set
{
num1 = value;
}
}

public double Num2
{
get
{
return num2;
}
set
{
num2 = value;
}
}

public virtual double GetResult()
{
double ret = 0;
return ret;
}

}

public class OperationAdd:Operation
{
public override double GetResult()
{
return Num1 + Num2;
}

}

public  class OperationSub:Operation
{
public override double GetResult()
{
return Num1 - Num2;
}
}

public  class OperationMul:Operation
{
public override double GetResult()
{
return Num1 * Num2;
}
}

public  class OperationDiv:Operation
{
public override double GetResult()
{
double value = 0;
if (Num2 == 0)
{
throw new Exception("除数不能为零");
}
value = Num1 / Num2;
return value;
}
}

/// <summary>
/// 策略模式:封装了变化
/// </summary>
public class OperationContext
{
Operation opr;
public OperationContext(string operationStr,double num1,double num2)
{
switch (operationStr)
{
case "+": opr = new OperationAdd(); break;
case "-": opr = new OperationSub(); break;
case "*": opr = new OperationMul(); break;
case "/": opr = new OperationDiv(); break;
}
opr.Num1 = num1;
opr.Num2 = num2;
}

public double GetResult()
{
return opr.GetResult();
}
}

class Program
{
static void Main(string[] args)
{

#region  策略模式
//策略模式:封装了变化,在context类的内部实现业务逻辑,UI层无需知道具体的逻辑
Console.WriteLine("策略模式运行效果:");
OperationContext oc = new OperationContext("+", 5, 6);
Console.WriteLine("策略模式的运行结果:5+6=" + oc.GetResult());
#endregion

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: