(1)定义委托:(百度百科样例,只有写了才有收获)

namespace Entrust
{
public delegate void GreetingDelegate(string name); //定义委托
class Class1
{
public void EnglishGreeting(string name)
{
Console.WriteLine("Good Morning." + name);
} public void ChineseGreeting(string name)
{
Console.WriteLine("早上好." +name);
} public void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
}
}

测试类:

namespace Entrust
{
class TestMain
{
static void Main(string[] args)
{
Class1 c = new Class1(); //c.GreetPeople("San Zhang",c.EnglishGreeting);
//c.GreetPeople("张三", c.ChineseGreeting); //Console.WriteLine("委托变量!");
//GreetingDelegate delegate1 = c.EnglishGreeting;
//GreetingDelegate delegate2 = c.ChineseGreeting;
//c.GreetPeople("张三", delegate2);
//c.GreetPeople("San Zhang", delegate1); //Console.WriteLine("多个方法绑定同一个委托!");
//GreetingDelegate delegate1;
//delegate1 = c.EnglishGreeting;
//delegate1 += c.ChineseGreeting;
//c.GreetPeople("李四",delegate1); //Console.WriteLine("直接调用委托!");
//GreetingDelegate delegate1;
//delegate1 = c.EnglishGreeting;
//delegate1 += c.ChineseGreeting;
//delegate1("小张"); //GreetingDelegate delegate1 = new GreetingDelegate(c.EnglishGreeting);
//delegate1 += c.ChineseGreeting;
//delegate1("小李"); GreetingDelegate delegate1 = c.EnglishGreeting;
delegate1 += c.ChineseGreeting; //绑定委托
delegate1 -= c.EnglishGreeting; //解除委托
delegate1("小张");
}
}
}

(2)定义委托事件(封装属性和方法)

namespace Entrust
{
public delegate void GreetingDelegate1(string name); class GreetingManage
{
public event GreetingDelegate1 MakeGreet;//这里声明一个事件 public GreetingDelegate1 delegate1;
public void GreetPeople(string name)
{
//if (delegate1 != null)
// delegate1(name);
MakeGreet(name);
}
}
}

执行的方法类

namespace Entrust
{
class GreetingLanguage
{
public void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
} public void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
}
}

测试类:

namespace Entrust
{
class TestMain
{
static void Main(string[] args)
{
GreetingLanguage gl = new GreetingLanguage();
GreetingManage gm = new GreetingManage();
//gm.delegate1 = gl.EnglishGreeting;
gm.MakeGreet += gl.ChineseGreeting;
gm.GreetPeople("小张");
Console.ReadKey();
}
}
}

(3)委托弥补观察者模式的不足(若观察者不存在)详见(设计模式之—观察者模式
通知者接口类(Subject)

namespace Observer_Pattern.CLASS
{
interface Subject
{
void Notify(); //通知
string SubjectState
{
get;
set;
}
}
}

秘书类(secreter)实现通知者接口

namespace Observer_Pattern.CLASS
{
public delegate void EventHandler(); //声明一个委托
class Secretary:Subject
{
public event EventHandler Update; //声明一事件Update,类型为委托EventHandler
private string action; /// <summary>
/// 通知
/// </summary>
public void Notify()
{
Update();
} public string SubjectState
{
get { return action; }
set { action = value; }
}
}
}

炒股工作者(stockWorker)

namespace Observer_Pattern.CLASS
{
class StockObserver
{
private string name;
private Subject sub;
public StockObserver(string name, Subject sub)
{
this.name = name;
this.sub = sub;
}
public void StockUpdate()
{
Console.WriteLine("{0} ,{1} 关闭股票软件,继续工作!",sub.SubjectState,name);
}
}
}

看NBA工作者(NBAWorker)

namespace Observer_Pattern.CLASS
{
class NBAObserver
{
private string name;
private Subject sub;
public NBAObserver(string name, Subject sub)
{
this.name = name;
this.sub = sub;
} public void NBAUpdate()
{
Console.WriteLine("{0} ,{1} 关闭NBA视频,继续工作!",sub.SubjectState,name);
}
}
}

测试类(TestMain)

namespace ObserverPattern_Entrust_
{
class TestMain
{
static void Main(string[] args)
{
Secretary mishu = new Secretary();
StockObserver worker1 = new StockObserver("小张", mishu);
NBAObserver worker2 = new NBAObserver("小李", mishu); mishu.Update += worker1.StockUpdate; //绑定委托
mishu.Update += worker2.NBAUpdate; //绑定委托 mishu.SubjectState = "老板回来了";
mishu.Notify(); //调用委托 Console.ReadLine();
}
}
}

测试结果:

最新文章

  1. 第二篇 Entity Framework Plus 之 Query Future
  2. linux 账号管理与ACL权限设定
  3. Raspberry Pi 配置笔记二
  4. 华为OJ—字符串排序(排序,忽略指定字符排序)
  5. 【JS】&lt;a&gt;标签调用js中函数的几种方法
  6. DBA日常工作职责 - 我对DBA的七点建议
  7. RDLC 聚合函数按条件求和,显示&quot;错误号&quot;
  8. FormData实现文件上传实例
  9. Qt的setMouseTracking使用
  10. 解决tomcat开始出现in production environments was not found on the java.library.path:xxx
  11. activemq配置安装
  12. 微信公众号_订阅号_爬虫puppeteer
  13. 【BZOJ1856】[SCOI2010]字符串(组合数学)
  14. BZOJ3064 Tyvj 1518 CPU监控 线段树
  15. 简单封装DBUtils 和 pymysql 并实现简单的逆向工程生成class 类的py文件
  16. HDU 3247 Resource Archiver (AC自动机+BFS+状压DP)
  17. jQuery的fadeIn和fadeOut实现的轮播图
  18. nio入门教程
  19. JS事件常用事件
  20. Connection to linux server with ORACLE SQL DEVELOPER

热门文章

  1. day11基础代码——函数指针
  2. elasticsearch 性能优化
  3. mysql的SQL_CALC_FOUND_ROWS 使用
  4. Unity问答——请教一下NGUI的图片转换问题
  5. 解决maven仓库有jar包但是maven程序无法下载仓库jar包
  6. Delphi下的RTTI函数大全
  7. Book for Opencv
  8. 编写Lex和Yacc
  9. 动态规划——数位dp
  10. LA 3263 欧拉定理