接上文中实现的观察者模式,上文中实现读者,报纸,出版社时,类Publisher如下:
public class Publisher
{
public string Name { get; set; }
public Publisher(string name)
{
this.Name = name;
}
public List<Person> Persons = new List<Person>();
public void SendNewspaper(Newspaper paper)
{
Persons.ForEach(person=>person.SetNewspaper(paper));
}
}
类Publisher中维护了一个读者的链表,发布报纸时,遍历该链表。用委托实现上述功能如下:
public class Publisher
{
public string Name { get; set; }
public Publisher(string name)
{
this.Name = name;
}
public delegate void _Persons(Newspaper paper);
public _Persons Persons{set; get;}
public void SendNewspaper(Newspaper paper)
{
if(Persons != null) Persons(paper);
}
}
当然,在实现委托时,也可以采用内置的委托类型Action,即:
public Action<Newspaper> Persons;
main函数的实现如下:
class Program
{
static void Main(string[] args)
{
Publisher p = new Publisher("出版社");
Person A = new Person("April");
Person B = new Person("harris");
p.Persons = A.SetNewspaper;
p.Persons += B.SetNewspaper;
p.SendNewspaper(new Newspaper ("人民日报","为人民服务"));
}
}