对我来说,许多设计模式的问题似乎总是在现有代码库中实现它们的最佳方式。
代码库是PHP4,它正在迁移到PHP5 OOP。然而,这是一个持续的过程,不太可能很快完成(用户总是想要新功能!)。
使用Mediator模式,应该在哪里注册事件?
如果创建了一个包含大量注册事件的脚本的目录,则可以通过引导程序加载该目录。
//bootstrap.php
..
new 'Listener'Something();
new 'Listener'SomethingElse();
new 'Listener'SomethingOtherThing();
或者,在事件可能被触发之前注册事件会更好吗?尽管存在事件被触发但从未注册的风险。
//user.php
class User {
..
function ageChange() {
new 'Listener'UserAge();
..
}
..
}
还是有不同的方法?
很难回答这个问题。这取决于情况(您的情况看起来更像观察者模式)
在我看来,最好在触发观察者/侦听器/中介器对象之前创建它们。
- 你不会用很多类填充全局名称空间
- 您不会浪费内存来存储最终可能不会使用的对象
- 您不会浪费cpu来创建大量的类
- 修改代码行为和传递/创建不同的类很容易。当所有东西都在引导程序中创建时,你必须坚持使用该集合
在某些情况下,在引导应用程序期间创建所有内容是很好的。但要做到这一点,请使用服务定位器模式或依赖注入模式来注入模式。对于依赖注入,我推荐Pimple库(http://pimple.sensiolabs.org/)。
还有我用PHP编写的Mediator模式示例:https://github.com/piotrmiazga/design_patterns/blob/master/src/Patterns/Mediator/Example.php