模板模式和方法回调及观察者模式的区别

模板模式

参考https://blog.csdn.net/ezconn/article/details/108812616

观察者模式

参考https://blog.csdn.net/ezconn/article/details/108564814

一,方法回调(回调函数)

回调是一种双向调用关系。A 类事先注册某个函数H到 B 类,A 类在调用 B 类的M函数的时候,B 类反过来调用 A 类注册给它的H函数。这里的 H 函数就是“回调函数”。A 调用 B,B 反过来又调用 A,这种调用机制就叫作“回调”。

通过Java代码表示

public interface ICallback {
    void onCallback();
}

public class BClass {
    public void setCallback(ICallback callback) {
        //...
        callback.onCallback();
        //...
    }
}

public class AClass {
    public static void main(String[] args) {
        BClass b = new BClass();
        b.setCallback(new ICallback() { //回调对象
            @Override
            public void onCallback() {//回调方法
                System.out.println("Call back me.");
            }
        });
    }
}

二,回调分类

回调可以分为同步回调和异步回调(或者延迟回调)。

同步回调

同步回调指在函数返回之前执行回调函数;异步回调指的是在函数返回之后执行回调函数。上面的代码实际上是同步回调的实现方式,在setCallback()函数返回之前,执行完回调函数 onCallback()。异步回调的例子:通过三方支付系统来实现支付功能,用户在发起支付请求之后,一般不会一直阻塞到支付结果返回,而是注册回调接口给三方支付系统,等三方支付系统执行完成之后,将结果通过回调接口返回给调用者。

异步回调

在Android中监听点击事件,肯定都用过;交互一般离不开事件的监听;

new Button(this).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("点击了按钮");
            }
});

同步回调和异步回调的区别

从代码结构上来看,事件监听器很像回调,即传递一个包含回调函数(onClick())的对象给另一个函数。从应用场景上来看,它又很像观察者模式,即事先注册观察者(OnClickListener),当用户点击按钮的时候,发送点击事件给观察者,并且执行相应的 onClick() 函数,这里的回调是异步回调,我们往 setOnClickListener() 函数中注册好回调函数之后,并不需要等待回调函数执行。

从应用场景上来看,同步回调看起来更像模板模式,异步回调看起来更像观察者模式。

从代码实现上来看,回调和模板模式完全不同。回调基于组合关系来实现,把一个对象传递给另一个对象,是一种对象之间的关系;模板模式基于继承关系来实现,子类重写父类的抽象方法,是一种类之间的关系。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ang_qq_252390816

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值