所在位置:答疑 - 内容   
onEnded "回调"的下列三种画法,那种正确呢
 

北京-高原(47***59)15:22:59
请问序列图中表示 onEnded "回调"的下列三种画法,那种正确呢?
1、

2、

3、
北京-高原(47***59)15:30:22
我觉得第一种回调画法容易与普通返回消息混淆,在下图这种左右都有消息线的情况感觉比较怪异:

《软件方法》中好像是第2种画法,但有人提出返回线需要有消息名,也就出现上面第3种画法。请指点,谢谢
崔久印(15****59)9:51:41
不知你图中"回调"的具体含义, 按一般理解, 个人认为将图一中onEnded虚线改为实线应该可以。
smile(8706***1)12:03:27
网上看到的一个关于回调的说法,基本上有三点

smile(8706***1)12:04:32
1. request那个函数调用的时候用那种只有两条线的箭头,而不是实心箭头
2. 回调的时候用实线
3. 回调的时候线上标示的函数应该是sender的函数,而不是receiver的函数
北京-高原(47***59)14:11:53
谢谢 @smile 的解答,也就是"回调"也是主动调用
潘加宇(3504847)15:42:21
两条异步(箭头不是实心的)的消息,而且最好不是水平的
潘加宇(3504847)15:45:31
@smile(8706***1) 12:04:32 对的

北京-高原(47***59)15:46:09
"是两条异步的消息",但我画的这些消息都是同步消息啊,不是多线程之类的?我本准备按@smile 的解答画,即将第一种画法的虚线改为实线的
潘加宇(3504847)15:47:48
你看下那个解答的箭头

北京-高原(47***59)15:49:19
@smile 的图是多线程的。我的不是多线程,是不是就只需要仅仅把返回改为向左的普通同步调用(实线)?
smile(8706***1)16:38:25
dosomething那条线的箭头应该改成不是实心的箭头,然后onEnded的线改成实线。另外假如onEnded是A的方法的话就是对的,如果是C的方法的话,应该改成A类中对应的回调方法吧
北京-高原(47***59)16:50:10
我画的图的本意是:1、在A中创建B对象 b = B.createB(),其中B类实现了一个含有onEnded方法的接口 ; 2、A调用C的doSomething方法,将b接口对象传入;3、C在doSomething中先自身处理do(),然后调用B的回调函数onEnded()。
北京-高原(47***59)16:58:39
@smile 所以dosomething那条线要改为不是实心的箭头,我还没有领会,请问是要表达异步消息吗?
onEnded是B的,通过接口注入的方式让C可以调用,我理解为"回调",所以onEnded的线改成实线。
北京-高原(47***59)17:07:18
重新画了下图,我觉得(1)doSomething是同步消息就用实心箭头,(2)onEnded回调用实线。请指点看现在是否有问题