[答疑]onEnded "回调"的下列三种画法,那种正确呢

43 阅读3分钟

北京-高原(4759)15:22:59
请问序列图中表示 onEnded "回调"的下列三种画法,那种正确呢?
1、图片
2、图片3、 图片
北京-高原(47
59)15:30:22
我觉得第一种回调画法容易与普通返回消息混淆,在下图这种左右都有消息线的情况感觉比较怪异:
图片
《软件方法》中好像是第2种画法,但有人提出返回线需要有消息名,也就出现上面第3种画法。请指点,谢谢
崔久印(1559)9:51:41
不知你图中"回调"的具体含义, 按一般理解, 个人认为将图一中onEnded虚线改为实线应该可以。
smile(8706
1)12:03:27
网上看到的一个关于回调的说法,基本上有三点
图片
smile(8706
1)12:04:32

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

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

    北京-高原(47
    59)15:49:19
    @smile 的图是多线程的。我的不是多线程,是不是就只需要仅仅把返回改为向左的普通同步调用(实线)?
    smile(87061)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()。
    北京-高原(4759)16:58:39
    @smile 所以dosomething那条线要改为不是实心的箭头,我还没有领会,请问是要表达异步消息吗?
    onEnded是B的,通过接口注入的方式让C可以调用,我理解为"回调",所以onEnded的线改成实线。
    北京-高原(47
    59)17:07:18
    重新画了下图,我觉得(1)doSomething是同步消息就用实心箭头,(2)onEnded回调用实线。请指点看现在是否有问题
    图片