用委托实现Publisher类

    接上文中实现的观察者模式,上文中实现读者,报纸,出版社时,类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 ("人民日报","为人民服务"));
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值