【发布时间】:2013-09-19 16:45:40
【问题描述】:
我正在构建一个开源库,我可以总结如下:
class SuperThing {
public function doStuff($object) {
// ...
}
}
我想为库的用户提供添加自定义行为的可能性。
例如,他可能想在操作中的特定点插入一些日志记录,或者他可能想在某个点修改对象。
我看到了两种方法:
template method 模式似乎合适,但它会迫使我添加 很多 受保护的方法(如
beforeDoingThingA()、afterDoingThingA()...),它会强制图书馆的用户来扩展我的课程以添加他的行为。使用事件:
SuperThing::doStuff()引发事件,用户可以随意注册。
对我来说,使用事件似乎更简单、更清晰、更易于维护......
但在我看来,事件主要是关于发送发生某事的消息。不允许有人“钩”入操作并修改某些对象。 也许我错了。
那么事件是否适合这种情况?如果没有,是否有模板方法模式的替代方案?
【问题讨论】:
-
是的,你对事件的理解有点不对。看看这个:stackoverflow.com/a/17377708/1208233
标签: oop events design-patterns template-method-pattern