JS详解-设计模式

news/2024/7/10 23:58:43 标签: 设计模式, 前端, 面试, es6, javascript, 开发语言

工厂模式:

单例模式:

javascript">// 1、定义一个类
        class SingleTon{
            // 2、添加私有静态属性
            static #instance
            // 3、添加静态方法
            static getInstance(){
                // 4、判断实例是否存在
                if(!this.#instance){
                    // 5、实例不存在,创建实例
                    this.#instance = new SingleTon();
                }
                // 6、返回实例
                return SingleTon.#instance;
            }
        }
        // 测试代码
        const s1 = SingleTon.getInstance();
        const s2 = SingleTon.getInstance();
        console.log(s1 === s2); // true

观察者模式:

发布订阅模式:

$on

$emit

        

$off

$once

源码集合:
javascript"><h2>发布订阅模式</h2>
    <button class="on">注册事件</button>
    <button class="emit">触发事件</button>
    <button class="off">移除事件</button>
    <button class="once-on">一次性事件注册</button>
    <button class="once-emit">一次性事件触发</button>
    <script>
        class MyEmmiter {
            // 添加私有属性
            #handlers = {
                // 事件名称:[事件处理函数1,事件处理函数2]
            }
            // 添加事件监听
            $on(event,callback){
                // 1.2保存事件
                if(this.#handlers[event] === undefined){
                    this.#handlers[event] = [];
                }
                this.#handlers[event].push(callback);
            }
            // 触发事件
            // 接收不定长参数
            $emit(event,...args){
                // 循环触发事件
                const funcs = this.#handlers[event] || []
                funcs.forEach(callback=>callback(...args))
            }
            // 移除事件
            $off(event){
                // 清空事件
                this.#handlers[event] = undefined
            }
            // 一次性事件注册
            $once(event,callback){
                // 注册$on事件
                this.$on(event,(...args)=>{
                    callback(...args)
                    // 事件内部移除
                    this.$off(event)
                } )
            }
        }
            // 实例化
            const bus = new MyEmmiter();

            // 注册事件
            document.querySelector('.on').addEventListener('click',()=>{
                bus.$on('event1',()=>{console.log('回调函数')})
                bus.$on('event2',(name,info)=>{console.log(name,info)})
                bus.$on('event2',(name,info)=>{console.log('event 第二个回调函数',name,info)})
            })
            // 触发事件
            document.querySelector('.emit').addEventListener('click',()=>{
                bus.$emit('event1')
                bus.$emit('event2','ian','18')
            })
            // 移除事件
            document.querySelector('.off').addEventListener('click',()=>{
                // 移除事件1
             bus.$off('event1')
            })
            // 一次性事件注册
            document.querySelector('.once-on').addEventListener('click',()=>{
                bus.$once('event3',(name,info)=>{console.log('一次性事件',name,info)})
            })
            // 一次性事件触发
            document.querySelector('.once-emit').addEventListener('click',()=>{
                bus.$emit('event3','ian','18')
            })


原型模式:

代理模式:

如图所示,使用缓存代理,只需要调用一次接口获取到数据,之后的接口数据都可以直接从缓存中获取,减小服务器压力

迭代器模式:


http://www.niftyadmin.cn/n/5470636.html

相关文章

Acwing.504 转圈游戏(带取余的快速幂)

题目 n个小伙伴&#xff08;编号从 0到 n−1&#xff09;围坐一圈玩游戏。 按照顺时针方向给 n个位置编号&#xff0c;从 0到 n−1。 最初&#xff0c;第 0号小伙伴在第 0号位置&#xff0c;第 1号小伙伴在第 1号位置&#xff0c;…&#xff0c;依此类推。 游戏规…

1.Spring Boot框架整合

Spring Boot项目创建&#xff08;约定大于配置&#xff09; 2.1.3.RELEASE版本示例 idea创建 从官网下载&#xff08;https://start.spring.io/&#xff09;单元测试默认依赖不对时&#xff0c;直接删除即可 Web支持&#xff08;SpringMVC&#xff09; <dependency>&…

解决VScode中matplotlib图像中文显示问题

一、更改配置文件 参考这个文件路径找到自己Python环境下的matplotlibrc文件并用记事本打开。 用ctrl F寻找下面的这两行并将前面的#删除&#xff0c;保存并退出。 font.family: sans-serif font.serif: DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, N…

C语言二进制常用逻辑运算符介绍与使用

在C语言中&#xff0c;二进制常用的逻辑运算符包括与&#xff08;AND&#xff09;、或&#xff08;OR&#xff09;、非&#xff08;NOT&#xff09;&#xff0c;以及异或&#xff08;XOR&#xff09;。以下是它们的介绍和使用方法&#xff1a; 与&#xff08;AND&#xff09;&a…

1.Swift基础控件:TableView列表

Swift TalbeView列表的使用 一、简介 在 iOS 开发中&#xff0c;UITableView 是一个常用的界面组件&#xff0c;用于显示列表型数据。UITableView 可以展示大量数据&#xff0c;并支持滚动、分组、选择等功能&#xff0c;是开发 iOS 应用中常见的组件之一。 以下是 UITableV…

Linux--进程(2)

目录 前言 1. 进程的状态 1.1 进程排队 1.2 运行&#xff0c;阻塞&#xff0c;挂起 2.Linux下具体的进程状态 2.1僵尸和孤儿 3.进程的优先级 4.Linux的调度与切换 前言 这篇继续来学习进程的其它知识 上篇文章&#xff1a;Linux--进程&#xff08;1&#xff09;-CS…

【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美(含源码仅此一份,先到先得)

【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美&#xff08;含源码仅此一份&#xff0c;先到先得&#xff09; 目录 【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美&#xff08;含源码仅此一份&#xff0c;先到先得&#xff09;1.面向对象的引用1.1简介1…

『大模型笔记』LLMs入门:从头理解与编码LLM的自注意力机制

LLMs入门&#xff1a;从头理解与编码LLM的自注意力机制 这里直接引用我语雀上的的文章&#xff1a;《从头理解与编码LLM的自注意力机制》