标签:设计模式
设计模式种类很多,但是目的确实一个,减少耦合,让代码的逻辑变的简单(也就是单一职责原则),同时在观察者模式种,有一种更好的方式,就是用委托来取代观察者模式,其实他也是一种非常好的去除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