旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

C#设想形式-观察者形式的另类的示例代码总结【C#.Net教程】,C#,观察者模式,另类

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:81评论:0


导读:定阅-分发形式,又叫观察者形式,那末这类形式它的完成机理是什么?它该如何在产物开辟中现实运用呢?我们学一种形式,最好不要枯燥的去学它,能够散布依据营业的需求将伪代码逐步转化为真正...
定阅-分发形式,又叫观察者形式,那末这类形式它的完成机理是什么?它该如何在产物开辟中现实运用呢? 我们学一种形式,最好不要枯燥的去学它,能够散布依据营业的需求将伪代码逐步转化为真正的代码。本身画绘图,编编码,体味这类机制,如许完整实践一遍后,才真正用于今后的产物开辟中。

写完后,画的类图:




起首,经由历程名字看出,得先定阅,然后,比及发送人,或许叫主办方,写好东西后,比方一篇体育新闻,最新热门,点击发送,如许会发送给一切定阅这个节目的人。

那末,我们看到这个关联是典范的一对多的关联,比方一是指主办单位,多是指那些定阅了这个报刊的个人,多是10几个,或许成千上百个。这么些定阅人中,能够一类是体育迷,一类是政界混的。

因而,我们起首建一个主办方的模子:

public class Sender 
{   //主办方,此处称为音讯发送者}

还得有想定阅这些报刊的人的模子:

public class Receiver 
{   //定阅报刊的人,此处称为接受者
   private string _name;   private Subject _sub;   public Receiver(string name, Subject sub)
   {       this._name = name;       this._sub = sub;    
   }
}

而且,注重此处,定阅报刊的人能够有多个呢!一切竖立一个定阅这些报刊的人的鸠合类:

public class ReceiverCollection
{   //这个鸠合维护着定阅报刊的人

   //封装一个定阅人的列表
   private List<Receiver> _receivers = new List<Receiver>();   public List<Receiver> ReceiverList
   {     get
     {       return _receivers;
      }
   }    //治理定阅人:增添一个定阅人,移除一个,统计人数
    public void AddReceiver(Receiver r)
    {       this._receivers.Add(r);
    }    public void RemoveReceiver(Receiver r)
    {       if(this._receivers.Contains(r))           this._receivers.Remove(r);       else 
          throw new ArgumentException("这人未定阅此报刊");
    }    public int ReceiverCount
    {       get
       {          return _receivers.Count;
       }
    }

}

好了,我们有了主办方对象的架子,定阅人对象,定阅人鸠合对象,用来治理定阅人。一对多的模子架子已架起来了,接下来,我们该完成这些对象各自的行动了!

我们晓得,主办方要在分发之前,就得控制须要分发给哪些人,除了晓得给谁发以外,主办方还要想好稿子,也就是宣布内容或主题完成后,下一步,把内容或主题发送给一切的定阅人!

那末主办方的这个行动,兑现为代码,是如何的呢?在已有架子的基础上,修正

public class Sender 
{   //主办方,此处称为音讯发送者

   //要晓得分发给哪些人
   private ReceiverCollection _receColl;   public Sender(ReceiverCollection receColl)
   {     this._receColl = receColl;
   }   //主办方肯定 分发主题
   public List<Subject> SendingSubjects {get; set;}   //主办方关照多个定阅人
    public void Notify()
    {       //实行更新事宜
       UpdateEvent();
    }    //因而须要定义一个主办方在关照定阅人时,实行的更新事宜
    //事宜搭载各种定阅人在收到主题后的行动!!!
    //当事宜触发时,回调搭载的各种定阅人收到主题后的行动!!!
    public delegate void MyEventHandler();    public event EventHandler UpdateEvent;
}

分发主题Subject 的模子为:

public class Subject
{   //主题话题
   public string Topic {get;set;}   //主题择要
   public string SubAbstract {get;set;}   //主题内容
   public string Content {get;set;}
}

各个对象模子及各自的行动都写好后,我们就能够运用这些对象了。

起首,主办方定义了两个主题,

            ReceiverCollection receColl = new ReceiverCollection();
            Sender sender = new Sender(receColl );
            Subject sportSubject = new Subject()
            {
                Topic = "Sport",
                SubAbstract = "篮球,足球,乒乓球",
                Content = "2018年俄罗斯世界杯,本日晚上国足迎来出线的症结争夺战!"
            };
            sender.SendingSubjects.Add(sportSubject);
            Subject newsSubject = new Subject()
            {
                Topic = "News",
                SubAbstract = "国内大事 国际纵横",
                Content = "十九大,行将召开,请前来参会!"
            };

增加一个定阅人的接口,两类定阅人对象,当UpdateEvent事宜触发时,回调搭载的各种定阅人收到主题后的行动,比方说看到主题今晚国足有竞赛后,郝海东会看竞赛。

public interface IResponse
{    void WillDo();   
}public class SportsReceiver:Receiver,IResponse
{   public void WillDo()
   {
      Console.WriteLine("I will watch tv tonight, good luck for gays"); 
   }  public SportsReceiver(string name, Subject subject)
            : base(name, subject)
        {

        }
}public class NewsReceiver:Receiver,IResponse
{   public void WillDo()
   {
      Console.WriteLine("I am going to Beijing to meeting"); 
   }   public NewsReceiver(string name, Subject subject)
            : base(name, subject)
        {

        }
}

然后增加2个定阅者

//增加一名体育大牛:郝海东receColl.AddReceiver(new SportReceiver("Hao Haidong", sender.newsSubjects[0]));
//增加县长:钱烈贤receColl.AddReceiver(new NewsReceiver("Qian Liexian", sender.newsSubjects[1]));

肯定主办方发送后,定阅者的行动,这里采用先注册,后发送主题后,回调的体式格局,触发定阅者的行动:

//要在此处注册定阅者看到音讯后的回响反映foreach(var rece in receColl)
  sender.UpdateEvent += new MyEventHandler(rece.WillDo);

主办方最先发送主题给定阅者:

sender.Notify();

如许,收到主办方发送的音讯后,定阅人回调他们的WillDo的要领,如许全部定阅-分发-回调的历程就闭合了!!!

以上就是C#设想形式-观察者形式的另类的示例代码总结的细致内容,更多请关注ki4网别的相干文章!

标签:C#观察者模式另类


欢迎 发表评论: