设计模式种类很多,但是目的确实一个,减少耦合,让代码的逻辑变的简单(也就是单一职责原则),同时在观察者模式种,有一种更好的方式,就是用委托来取代观察者模式,其实他也是一种非常好的去除If的方法。那么接下来咱们慢慢的说为什么,怎么实现的。
Public class MoneyState:State {
Public void NotEnough(Double Moeny) {
If Money<100.00 then {
Console.WriteLine(”您的余额不足100元”);
QueryMoneyNow() //查询当前余额
<span style="white-space:pre"> </span>else If Money<100.00 then {
Console.WriteLine(”您的余额不足100元”);
<span style="white-space:pre"> </span><pre name="code" class="csharp"><span style="white-space:pre"> </span>QueryMoneyNow() //查询当前余额Else if…
…… end if }
} }
可是这样的代码是可怕的,因为如果我要添加一个99元的,你就要从一堆IF语句种,找这个值应该的位置,而且还很容易破坏了原有的代码,这样是不符合开放闭合原则的。所以我们就迎来了状态模式。<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace NoDelegate
{
class Program
{
//加法运算
public static int AddOpen(int a, int b)
{
return a + b;
}
//减法运算
public static int SubOpen(int a, int b)
{
return a - b;
}
public enum Operate
{
Add, Sub
}
//结果
public static int PeopleResult(int a, int b, Operate oper)
{
int result = 0;
switch(oper)
{
case Operate.Add:
result = AddOpen(a, b);
break;
case Operate.Sub:
result = SubOpen(a, b);
break;
}
return result;
}
static void Main(string[] args)
{
Console.WriteLine("最终相加结果是:" + PeopleResult(4,3,Operate.Add));
Console.WriteLine("最终相减结果是:" + PeopleResult(4,3,Operate.Sub));
Console.Read();
}
}
}
</span> 用委托namespace Delegate
{
//定义委托
public delegate int GenericFun(int a,int b);
class Program
{
//加法运算
public static int AddOpen(int a, int b)
{
return a + b;
}
//减法运算
public static int SubOpen(int a, int b)
{
return a - b;
}
//结果
public static int PeopleResult(GenericFun action, int a, int b)
{
int result = action(a, b);
return result;
}
static void Main(string[] args)
{
Console.WriteLine("最终相加结果是:" + PeopleResult(AddOpen, 4, 3));
Console.WriteLine("最终相减结果是:" + PeopleResult(SubOpen, 4, 3));
Console.Read();
}
}
}
看出来了吗,用委托监视方法,就好像是一个代理模式一样,把别人的东西当成自己的来用。原文:http://blog.csdn.net/lovemenghaibin/article/details/44120155