欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#观察者模式(Observer Pattern)实例教程

程序员文章站 2023-12-20 13:15:28
本文以实例形式简单讲述了c#观察者模式,分享给大家供大家参考。具体实现方法如下: 现在假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户。 把通知这个动作抽象...

本文以实例形式简单讲述了c#观察者模式,分享给大家供大家参考。具体实现方法如下:

现在假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户。

把通知这个动作抽象成一个接口。代码如下所示:

public interface iservice
{
    void notif();
}

客户如果想获得通知,就需要实现以上的接口。这里的客户被看作是观察者。

public class customera : iservice
{
    public void notif()
    {
      console.writeline("客户a收到通知了~~");
    }
}
public class customerb : iservice
{
    public void notif()
    {
      console.writeline("客户b收到通知了~~");
    }
}

作为软件公司来讲,维护着一个客户的集合,并提供注册、取消注册的方法,往这个集合添加或删除客户。每当有通知的时候,就遍历客户集合,让iservice执行通知。软件公司可以看作是一个被观察对象,或者说是发起动作的源头。

public class mycompany
{
    private ilist<iservice> subscribers = new list<iservice>();
    public void subscribe(iservice subscriber)
    {
      subscribers.add(subscriber);
    }
    public void cancelsubscribe(iservice subscriber)
    {
      subscribers.remove(subscriber);
    }
    public void sendmsg()
    {
      foreach (iservice service in subscribers)
      {
        service.notif();
      }
    }
}

客户端创建软件公司实例、创建观察者实例、注册或取消观察者等。

class program
{
    static void main(string[] args)
    {
      mycompany company = new mycompany();
      iservice customera = new customera();
      iservice customerb = new customerb();
      company.subscribe(customera);
      company.subscribe(customerb);
      company.sendmsg();
      console.readkey();
    }
}

总结:

把一个通知的动作抽象成接口
观察者如果想接收到通知,就实现通知接口
被观察对象做3件事情:维护观察者的集合,注册/取消观察者,发起动作遍历观察者集合让通知接口来做事

希望本文所述对大家c#程序设计的学习有所帮助。

上一篇:

下一篇: