什么是Pub-Sub
发布订阅是一种设计模式,它允许应用程序组件之间进行松散耦合。
其实订阅发布设计中主要是发布者生成事件通道,用于在不了解任何订阅者存在的情况下通知订阅者。
当然委托EventHandlers和Event关键字在此事件处理机制中担任着重要的角色。下面我们来看看如何使用它们。
Pub和Sub的使用
首先我们看一个简单地订阅发布模式.
定义一个Action委托,无返回值.
namespace PubSubPattern
{
public class Pub
{
public Action OnChange { get; set; }
public void Raise()
{
if (OnChange != null)
{
//Invoke OnChange Action
OnChange();
}
}
}
class Program
{
static void Main(string[] args)
{
var p = new Pub();
p.OnChange += () => Console.WriteLine("Sub 1");
p.OnChange += () => Console.WriteLine("Sub 2");
p.Raise();
Console.WriteLine("Press enter !");
Console.ReadLine();
}
}
}
如上代码我们创建了一个发布者,并且我们调用委托进行创建我们匿名方法来订阅。由于委托提供了多播功能,因此我们可以OnChange属性上使用+=.
虽然说我们看着如上代码执行无误,但是程序中仍然存在一些问题,如果使用=
而不是+=
,那么OnChange属性中将会删除第一个订阅者。
由于OnChange是公共属性,因此该类的任何外部用户都可以进行调用p.OnChange()
.