110,567
社区成员
发帖
与我相关
我的任务
分享
//委托示例代码
public class OpertionClass
{
public delegate double GetResult(double m, double n);
public static double jia(double m, double n) { return m + n; }
public static double jian(double m, double n) { return m - n; }
public static double chen(double m, double n) { return m * n; }
public static double chu(double m, double n) { return n == 0 ? 0 : m / n; }
public static double jisuan(double m, double n, GetResult function)
{
return function(m, n);
}
}
protected void Page_Load(object sender, EventArgs e)
{
double m = 2, n = 4;
Response.Write(OpertionClass.jisuan(m, n, OpertionClass.jia).ToString() + "<br />");
//结果:
//6
}
//简单工厂模式示例代码
public class OpertionClass
{
private double _NumberA = 0;
private double _NumberB = 0;
public double NumberA
{
get { return _NumberA; }
set { _NumberA = value; }
}
public double NumberB
{
get { return _NumberB; }
set { _NumberB = value; }
}
public virtual double GetReuslt()
{
double result = 0;
return result;
}
}
public class OpertionAdd : OpertionClass
{
public override double GetReuslt()
{
return NumberA + NumberB;
}
}
public class OpertionSub : OpertionClass
{
public override double GetReuslt()
{
return NumberA - NumberB;
}
}
public class OpertionMul : OpertionClass
{
public override double GetReuslt()
{
return NumberA * NumberB;
}
}
public class OpertionDiv : OpertionClass
{
public override double GetReuslt()
{
return NumberB == 0 ? 0 : NumberA / NumberB;
}
}
public enum OpertionFuntion
{
Add,
Sub,
Mul,
Div
}
public class SimpleFactory
{
public static OpertionClass CreateOpertion(OpertionFuntion op)
{
OpertionClass oper = null;
switch (op)
{
case OpertionFuntion.Add:
oper = new OpertionAdd();
break;
case OpertionFuntion.Mul:
oper = new OpertionMul();
break;
case OpertionFuntion.Sub:
oper = new OpertionSub();
break;
case OpertionFuntion.Div:
oper = new OpertionDiv();
break;
default:
break;
}
return oper;
}
}
protected void Page_Load(object sender, EventArgs e)
{
OpertionClass oper = SimpleFactory.CreateOpertion(OpertionFuntion.Add);
oper.NumberA = 2;
oper.NumberB = 4;
Response.Write(oper.GetReuslt().ToString() + "<br />");
//结果: 6
}
//现在我的困惑是:如果我想再加一个求平方之和的方法
//那么对于委托而言,我只要加一个方法叫:
public static double pingfanghe(double m, double n) { return m * m + n * n; }
//调用的时候只要这样就可以得到我想要的结果:
Response.Write(OpertionClass.jisuan(m, n, OpertionClass.pingfanghe).ToString() + "<br />");
//但是对于简单工厂模式,我不仅要新加一pingfanghe方法 ,还要修改switch分支和枚举,新加case分支及枚举对象
//这样看来,委托且不是优于简单工厂模式? 困惑。。。
public class OpertionPingFangHe : OpertionClass
{
public override double GetReuslt()
{
return NumberA * NumberA + NumberB * NumberB;
}
}
public enum OpertionFuntion
{
Add,
Sub,
Mul,
Div,
PingFangHe
}
public class SimpleFactory
{
public static OpertionClass CreateOpertion(OpertionFuntion op)
{
OpertionClass oper = null;
switch (op)
{
case OpertionFuntion.Add:
oper = new OpertionAdd();
break;
case OpertionFuntion.Mul:
oper = new OpertionMul();
break;
case OpertionFuntion.Sub:
oper = new OpertionSub();
break;
case OpertionFuntion.Div:
oper = new OpertionDiv();
break;
case OpertionFuntion.PingFangHe:
oper = new OpertionPingFangHe();
break;
default:
break;
}
return oper;
}
}