嗯,从实现的角度来看,有三种不同的方法(注意这些是OO设计模式,但是如果你想要的话,你可以在功能上或程序上实现它们)。
观察者模式
你可以实现Observer Pattern.基本上,你会有每个事情,可以引发事件是一个主题。然后你想听的类/代码绑定到它想要听的具体。所以,假设你有一个名为Foo的控制器。如果你想听它,你可以调用$ fooController-> attach($ observer);.然后,每当控制器想说某事时,它会将事件分派给所有的观察者。
这真的很适合一个通知系统(扩展什么类正在做)。它不太适合实时修改代码的行为。
2.装饰模式
你也可以实现Decorator Pattern.基本上,你需要修改的对象,并“包装”在一个新的对象,你想要改变。这真的很适合修改和扩展的行为(因为你可以有选择地覆盖的功能从包类)。
如果你已经定义了接口并期望对象符合它们,这个工作非常好。如果你没有接口(或不正确地使用它们),装饰器模式可以为你做的大部分将丢失。
还要注意,这真的不是一个做事件的方式,它是一种修改对象行为的方式。
3.中介模式
你也可以使用一个Mediator.基本上,你有一个全局中介,跟踪你的监听器。当您要触发事件时,将事件发送到中介器。然后,中介器可以跟踪哪些监听对象想要接收该事件,并且正确地传递消息。
这具有中心的优点。意味着多个发送者可以发送相同的事件,并且对听众来说,它不会影响发送它的人…