发布订阅设计模式

设计模式

一种编程思想,这类思想会解决一种问题

例如:

  • 单例模式:简单来说是一个对象,平时使用时用闭包包起来
    工厂模式:在jQuery中使用$(’’)或者jQuery()包起来,当做普通函数执行,最后创造一个他的实例,使用init中转一下
  • 构造函数设计模式:new一个东西执行就是构造函数模式,解决了:可以创造一个类的多个实例,每一个实例之间既是独立的,每一个都有自己的单独属性,而且还能找到所属的公共属性。例如swiper插件,使用它就是要new,因为这个项目中可能有多个,每次使用swiper创造多个轮播图,每一个轮播图都会new一个新的swiper,每一个swiper都会有自己私有的特征,互相之间不冲突,如何动起来这些属性就是公有的
  • 发布订阅设计模式 ---->前身是观察者模式:可以把未来要处理的事情,有效的进行管理和依次进行[发布计划表——>开始在到达条件执行之前,先把后期要做的事情订阅到计划表之中,到达条件和,通知计划表中的方法执行]

例如不使用发布订阅
我们有五个方法,要让他1秒钟后依次执行,怎么做呢?那么毫无疑问使用定时器呗。

这样写也就是最常见的方法,这样也没有任何问题!,
比如特别多的代码呢?假设你期间写了大量的代码,
你突然又写了一个方法也想让他两秒钟后执行,
那么是不是又需要找到那个定时器给他加进去?再假设你又不想要了又要找回去重新找
那么**jQuery中提供了发布订阅**
设计模式是什么?是一种思想,可以简化代码,他只是一个优化项不是一个必须项。
const dactory1=()=>{console.log(1)};
const dactory2=function(){
    console.log(2);
}
const dactory3=()=>{console.log(3)};
const dactory4=function(){
    console.log(4);
}
const dactory5=()=>{console.log(5)};
const dactory6=function(){
    console.log(6);
}
setTimeout(function(){
    dactory1();
    dactory2();
    dactory3();
    dactory4();
    dactory5();
    dactory6();
},2000)
  • 1.创建计划表
let $plan=$.Callbacks();—>创建一个计划表  可以创建多个计划表
那么我们输出$plan看看有什么方法
  • 在这里插入图片描述

add——>向计划表中添加计划
empty——>清除所有计划
fire——>通知计划表中方法按照顺序执行
has—>验证计划表中是否存在该方法
remove——>移除计划表中的某个方法
最常用的 add fire remove

  • 2.设置何时执行计划表中的方法
setTimeout(function(){
   $plan.fire(10,20)
},2000)
let $plan=$.Callbacks();
$plan.add(dactory2);
$plan.add(dactory3);
$plan.add(dactory4);
$plan.add(dactory5);
$plan.has(dactory6);
此时是异步操作,哪怕时间到了我也不执行,将他放入WEBAPI中等待,就算一毫秒只要我同步操作未完全那么那就需要等着,而我下面的同步代码一次往计划中表加入方法即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南笙前端工程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值