两种简单发布-订阅模式写法

1使用委托

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _01发布订阅_委托实现_
{
   class Program
       {
            static void Main(string[] args)
                    {
Boss lee = new Boss();
Jober1 j1 = new Jober1();
Jober2 j2 = new Jober2();
lee.update1 += j1.A;
lee.update1 += j2.B;
lee.Notice();
Console.ReadKey();
}
}

//定义一个委托类型
public delegate void Notify();

//发布类
public class Boss
{
public string Name { get; set; }

public Notify update1;

public void Notice()
{
update1();
}
}

//订阅类1
public class Jober1
{
public void A()
{
Console.WriteLine("I am A");
}
}
//订阅类2
public class Jober2
{
public void B()
{
Console.WriteLine("i AM B");
}
}

}

2不使用委托

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _01发布订阅
{
class Program
{
static void Main(string[] args)
{
List<Mouth> list1=new List<Mouth>();
Cat cat1 = new Cat("Black", list1);
Mouth mouth1 = new Mouth("Tiom");
Mouth mouth2 = new Mouth("3A");
cat1.AddMouth(mouth1);
cat1.AddMouth(mouth2);
cat1.TalkStupid();
Console.ReadKey();
}
}

//法布雷

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _01发布订阅
{
class Cat
{
public string Name
{
get;
set;
}
public List<Mouth> list1
{
get;
set;
}
public void AddMouth(Mouth mouth)
{
this.list1.Add(mouth);
}
public void TalkStupid()
{
Console.WriteLine("My name is "+this.Name);
foreach (var item in list1)
{
item.Run();
}
}

public Cat()
{
}

public Cat(string name,List<Mouth>list)
{
this.Name = name;
this.list1 = list;
}

}
}

//订阅类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _01发布订阅
{
class Mouth
{
public string Name
{
get;
set;
}

public void Run()
{
Console.WriteLine("runrunrun,MyNAMEIS "+this.Name);
}

public Mouth() { }
public Mouth(string name)
{
this.Name = name;
}
}
}

时间: 2024-10-23 11:53:59

两种简单发布-订阅模式写法的相关文章

JavaScript设计模式之----原生JS实现简单的发布订阅模式

第一部分: 发布订阅模式简介 发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模式. 发布—订阅模式可以广泛应用于异步编程中,是一种替代传递回调函数的方案.比如,可以订阅ajax请求的error.success等事件.或者如果想在动画的每一帧完成之后做一些事情,可以订阅一个事件,然后在动画的每一帧完成之后发布这个事件.在异步编程中使用发布—订阅模式,就无需过

ActiveMQ简单简绍(“点对点通讯”和 “发布订阅模式”)

ActiveMQ简单简绍 MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBMWEBSPHERE MQ. MQ特点: M

Javascript中理解发布--订阅模式

阅读目录 发布订阅模式介绍 如何实现发布--订阅模式? 发布---订阅模式的代码封装 如何取消订阅事件? 全局--发布订阅对象代码封装 理解模块间通信 回到顶部 发布订阅模式介绍 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 现实生活中的发布-订阅模式: 比如小红最近在淘宝网上看上一双鞋子,但是呢 联系到卖家后,才发现这双鞋卖光了,但是小红对这双鞋又非常喜欢,所以呢联系卖家,问卖

理解《JavaScript设计模式与开发应用》发布-订阅模式的最终版代码

最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线空间功能和命名空间功能,以达到先发布再订阅的功能和防止名称冲突的效果.但是令人感到遗憾的是最终代码并没有给出足够的注释.这让像我一样的小白就感到非常的困惑,于是我将这份最终代码仔细研究了一下,并给出了自己的一些理解,鉴于能力有限,文中观点可能并不完全正确,望看到的大大们不吝赐教,谢谢! 下面是添加了个人注释的

Shuttle ESB(四)——发布订阅模式实例介绍(1)

前面,我已经集中用了三篇文章来讲Shuttle ESB的入门实例与宏观概念.Shuttle ESB一共有两种发送消息的模式:请求/相应模式与Pub/Sub模式. 关于这两种模式的区分,请看下面文章的介绍:Shuttle ESB(三)--架构模型介绍(2) 在Shuttle ESB的第一篇文章中,关于入门实例的介绍,是基于Command命令的请求响应模式.这种模式发送的消息比较简单,是同步的.发送消息端与接收消息端的行为耦合性比较大.请求发送后,其他进程都会处于等待状态,等待服务端返回响应信息后,

观察者模式与发布订阅模式的区别

观察者模式是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实时事件处理系统. 发布/订阅模式(Pub/Sub)是一种消息模式,它有 两个参与者 :  发布者和订阅者 .发布者向 某个信道发布一条消息,订阅者绑定这个信道,当有消息发布至信道时就会 接收到一个通知.最重要的一点是, 发布者和订阅者是完全解耦的,彼此并不知晓对方 的存在.两者仅仅共享一个信道名称. 从定义上可

观察者模式和发布订阅模式(上)

观察者模式 定义:观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新. 其中有两个定义需要明确,被观察者和观察者.通常来说,这两者是一对多的,也有多对多的情景. 在网页开发中,被观察者通常是数据源,不论是内存数据,还是持久化数据,又或者是接口返回的数据,都可以作为被观察者.它一旦改变,就去改变依赖于它的节点. 观察者有很多可能,针对于网页开发,我们常常认为dom节点是观察者,一旦节点的监视的数据源发

JS的发布订阅模式

JS的发布订阅模式 这里要说明一下什么是发布-订阅模式 发布-订阅模式里面包含了三个模块,发布者,订阅者和处理中心.这里处理中心相当于报刊办事大厅.发布者相当与某个杂志负责人,他来中心这注册一个的杂志,而订阅者相当于用户,我在中心订阅了这分杂志.每当发布者发布了一期杂志,办事大厅就会通知订阅者来拿新杂志.这样在结合下面的图应该很好理解了. 其实就是将发布者和订阅者解耦了,在实际开发中,经常会遇到某个方法内处理很多的逻辑,最简单的就是直接在方法内直接写.这种是高度耦合的面向过程的写法.对于代码维护

RabbitMQ指南之三:发布/订阅模式(Publish/Subscribe)

在上一章中,我们创建了一个工作队列,工作队列模式的设想是每一条消息只会被转发给一个消费者.本章将会讲解完全不一样的场景: 我们会把一个消息转发给多个消费者,这种模式称之为发布-订阅模式. 为了阐述这个模式,我们将会搭建一个简单的日志系统,它包含两种程序:一种发送日志消息,另一种接收并打印日志消息.在这个日志系统里,每一个运行的消费者都可以获取到消息,在这种情况下,我们可以实现这种需求:一个消费者接收消息并写入磁盘,另一个消费者接收消息并打印在电脑屏幕上.简单来说,生产者发布的消息将会以广播的形式