中介程序模式何时注册事件


Mediator Pattern when to register events

对我来说,许多设计模式的问题似乎总是在现有代码库中实现它们的最佳方式。

代码库是PHP4,它正在迁移到PHP5 OOP。然而,这是一个持续的过程,不太可能很快完成(用户总是想要新功能!)。

使用Mediator模式,应该在哪里注册事件?

如果创建了一个包含大量注册事件的脚本的目录,则可以通过引导程序加载该目录。

//bootstrap.php
..
new 'Listener'Something();
new 'Listener'SomethingElse();
new 'Listener'SomethingOtherThing();

或者,在事件可能被触发之前注册事件会更好吗?尽管存在事件被触发但从未注册的风险。

//user.php
class User {
    ..
    function ageChange() {
        new 'Listener'UserAge();
        ..
    }
    ..
}

还是有不同的方法?

很难回答这个问题。这取决于情况(您的情况看起来更像观察者模式)

在我看来,最好在触发观察者/侦听器/中介器对象之前创建它们。

  1. 你不会用很多类填充全局名称空间
  2. 您不会浪费内存来存储最终可能不会使用的对象
  3. 您不会浪费cpu来创建大量的类
  4. 修改代码行为和传递/创建不同的类很容易。当所有东西都在引导程序中创建时,你必须坚持使用该集合

在某些情况下,在引导应用程序期间创建所有内容是很好的。但要做到这一点,请使用服务定位器模式或依赖注入模式来注入模式。对于依赖注入,我推荐Pimple库(http://pimple.sensiolabs.org/)。

还有我用PHP编写的Mediator模式示例:https://github.com/piotrmiazga/design_patterns/blob/master/src/Patterns/Mediator/Example.php