时间:2021-07-01 10:21:17 帮助过:58人阅读
01 |
|
02 | ? |
03 | /** |
04 | ? * 包装器(Wrapper). |
05 | ? * Wrapper是一个AOP_LIKE的实现. 也可以看作监听者模式的实现. |
06 | ? * 一个Wrapper报装了一个对象(source). source可以是任意对象(不包括数组及原子类型),甚至是一个Wrapper. |
07 | ? * |
08 | ? * 包装器可以任意添加饰品(Decoration).通过Wrapper调用source的函数的流程将是: |
09 | ? *? unpacking --> teardown --> open --> setup --> packing. |
10 | ? * |
11 | ? *? 例如调用source->doXX(),各个流程将是: |
12 | ? *? unpacking:? 解包. 这是调用任意source的函数都会调用的方法; |
13 | ? *? teardown:?? 撕掉饰品. 对于Wrapper中的每个Decoration,调用其before()函数; |
14 | ? *? open:?????? 真正调用source->doXX()函数; |
15 | ? *? setup:????? 重新贴上饰品. 对于Wrapper中的每个Decoration,调用其after()函数; |
16 | ? *? packing:??? 重新打包.? 这是调用任意source的函数都会调用的方法; |
17 | ? * |
18 | ? */ |
19 | class ?Wrapper{ |
20 | ???? private ?$source ; |