JS设计模式—部分总结

JavaScript设计模式

1. 单例模式

单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点

let singleton = (function(){
    let instance;
    return function(constructor){
        if (!instance){
            instance = new constructor();
        }
        return instance;
    }
})()

2. 策略模式

定义一系列算法,并将其封装为策略类,当环境类为了实现某个功能,调用策略类中的具体策略方案

策略模式将算法的使用以及算法的实现进行解耦

3. 代理模式

提供一个替身对象(代理)来控制对目标对象的访问,替身对象可以进行请求的拦截,处理,判断和转发

代理模式分为两种

  • 保护代理:对向目标对象的请求进行拦截和判断,根据不同条件来决定是否转发给目标对象
  • 虚拟代理:虚拟代理将开销较大的对象,延迟到其真正需要时才创建,能够遵守单一职责原则

4. 迭代器模式

迭代器模式提供一种方法来访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示

迭代器模式分为

  • 内部迭代器:内部已经定义好了迭代规则
  • 外部迭代器:必须显示地请求迭代下一个对象

内部迭代器demo

let each = function(arr, cb) {
    for (let i = 0, l = arr.length; i < l; i++){
        cb.call(arr[i], i, arrp[i]);
    }
};
each([1,2,3], function(index, number) {
    console.log(index, number);
})

5. 发布订阅模式(也称观察者模式)

当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知

发布订阅模式中存在两种角色:发布者和订阅者

其中发布者必须实现的内容:

  1. 设置缓存列表,亦称订阅者列表,用于记录订阅者或者订阅者的回调函数
  2. add订阅者方法,添加订阅者或其回调函数
  3. notify发布消息方法,遍历缓存列表,通知所有订阅者或直接执行订阅者的回调函数

6. 组合模式

组合模式描述代码的部分—整体层次结构,组合对象中存在组合对象和叶对象,并且提供相同接口

用户在组合模式中只需要关心组合树的最顶层的组合对象,只需要触发顶层组合对象,请求便会沿树向下转运至叶对象

7. 模板方法模式

模板方法模式是一种基于继承的设计模式

  • 通过抽象父类,父类封装子类算法的算法框架
  • 通过具体实现子类,子类可以对父类中的“抽象”方法进行重写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值