A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 伍仪华   /  2011-7-31 11:59  /  2028 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

因为接口已经是写好的,用观察模式好像有点把接口给污染耦合了,有人给个招不。
另外有一问题:用aop拦截器出现这个问题
接口文件中有两个方法 A(); B();
如果在return之前拦截B(),能够成功,但如果是在A()的实现类中调用B(),则拦截不到了,就是不能在嵌套拦截。
A(){
B(); //这样调用拦截不到B();
}
有没有人想个办法,我想知道B()是否调用了,因为我要做个一旦被调用了就去执行某个操作。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 提问得像你这样,先想再问!

查看全部评分

1 个回复

倒序浏览
黑马网友  发表于 2011-8-1 01:17:15
沙发
可以。观察模式其实就如监听模式一样,它们本质上都是在利用事件驱动机制。
如果你在某一方法被调用时执行一些操作或传递一些信息,可以这样:
public void fun(){
       //该方法的代码块
   //你要加入的操作或实现信息传递
   //该方法的代码块
   return;
}
无论该方法在何处被调用,你加入的操作都会被执行。你的操作可以加在方法体的任意位置。
这就是事情的本来面目,然而一般情况下,为了更灵活的考虑,我们并不这样做。而是通过定义通用的接口来封装我们插入的操作,如此做,只要简单的实现接口,便可随时定义我们要插入到方法中操作。
准确的说,我们无法拦截一个方法的执行,除非其因不可抗力而终止执行,我们所能做的就是,了解方法正在执行,并且在其执行的逻辑之外添加一些额外的操作而且,这与方法的本来代码是无关的。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马