【场景方案】带你浅浅了解下前端所需要的一些常用设计模式,提供例子说明

news/2025/2/13 5:13:34/

文章目录

  • 前言
  • 工厂模式
  • 单例模式
  • 代理模式
  • 观察者模式
  • 发布订阅模式
  • 装饰器模式
  • 尾巴

前言

目前没精力深入了解,所以先记录一些比较常用的设计模式,且不会很深入。

日后有空了,待我深入了解后再更新文章。

部分知识来源双越老师的课程


工厂模式

大白话来说就是,定义了一个函数,这个函数相当于一个工厂,你需要什么样的产品,就输入什么样的参数,最终它给你生产出来。

例如:

  • React createElement函数
  • JQ的$()
  • 你自己封装的构造函数

拿构造函数来说,例如你封装了很多可以归为一个大类的class:

class IntNum {...}
class AntNum {...}
class TelNum {...}
// ... 等等

咱们可以把这堆关于不同类型数据处理的类,归纳成一个构造函数:

function GetTypeNumClass(type) {// ... 根据不同类型,return一个new class
}

这就是一个最简单的工厂模式写法


单例模式

主要特点是只能生成全局的唯一实例。

例如:

  • vuex的store

写个例子(修饰符只在TS中有):

class SingleTon {private static instance: SingleTon | null = nullprivate constructor() {}public static getInstance(): SingleTon {if (this.instance === null) {this.instance = new SingleTon()}return this.instance}fn1() {}fn2() {}
}const a = SingleTon.getInstance()
a.fn1()
a.fn2()const b = SingleTon.getInstance()
console.log(a === b); // 实例化出来的对象是同一个
  • public:表示公有,在父类定义函数中和外,以及子类都能直接以任何形式访问。
  • private:表示私有,只有在父类定义函数中访问,子类函数内部无法访问(但可通过外面调用继承的父类方法去访问)。

原文链接:https://blog.csdn.net/pagnzong/article/details/117002780

因为js是单线程语言,所以创建单例模式很简单方便。其他语言像java是多线程的,不考虑锁死线程会多个线程同时创建单例。


代理模式

就是你想访问一个对象是无法直接访问的,只能通过一个代理层去访问。

例如:

  • proxy,通过get和set的触发进行访问

观察者模式

例如:

  • 平时加的监听器addEventListener

发布订阅模式

例如:

  • vue的bus机制

和观察者模式的区别:

  • 观察者模式,我认为触发主体和接收者是强绑定的,例如按钮和点击事件,二者关联性强。
  • 发布订阅模式,我认为触发的主体和接收者无需强绑定,接收者只和事件总线强绑定。

装饰器模式

相当于给原来的一些东西新附上一些功能

例如:

  • class和方法等的修饰符
  • ts的decorator语法

尾巴

记录的很简单,只是现在没空详细去做了解。未来一定补充!!!

多了解一些设计模式,你才能设计出高级的代码。中级前端和高级前端之间相差的其中一个维度就是代码设计。


http://www.ppmy.cn/news/98221.html

相关文章

pytorch分布式训练DDP(傻瓜版)

文章目录 为什么要使用分布式训练基本概念常用函数使用DataParrel使用DDP构建主函数训练函数训练器启动 参考文章 为什么要使用分布式训练 单卡显存不够了!!!(核心原因)比较高级,比较快。 基本概念 worl…

C++:STL--List

文章目录 一.STL-list的数据结构链表结点模板 二.List的框架与迭代器的实现1.STL中的容器迭代器2.List的迭代器List正向遍历迭代器类模板(对ListNode< T >* 指针的封装)反向遍历迭代器的类模板(对正向迭代器的封装) 3.List的实现框架 三. List的成员接口的实现1.在List类…

CorelDRAW2023序列号及下载安装条件

始于1989年并不断推陈出新,致力为设计工作者提供更高效的设计工具&#xff01;CorelDRAW滋养并见证了一代设计师的成长&#xff01;在最短的时间内交付作品&#xff0c;CorelDRAW的智能高效会让你一见钟情&#xff01;CorelDRAW 全称“CorelDRAW Graphics Suite“&#xff0c;也…

【JAVAWEB】HTML的常见标签

目录 1.HTML结构 1.1认识HTML标签 1.2HTML文件基本结构 1.3标签层次结构 1.4快速生成代码框架 2.HTML常见标签 注释标签 标题标签&#xff1a;h1-h6 段落标签:p 换行标签&#xff1a;br 格式化标签 图片标签 超链接标签&#xff1a;a 表格标签 列表标签 表单标…

如何使用ChatGPT?初学者简单指南

Chat GPT 风靡全球&#xff0c;并在短时间内成为世界上增长最快的应用程序。随着所有关于其潜在影响的讨论&#xff0c;你可能会想知道&#xff1a;如何使用 ChatGPT&#xff1f; 使用 ChatGPT需要准备&#xff1a;一个 OpenAI 帐户和一个网络浏览器。 访问chat.openai.com并…

数据在内存中的存储(1)——整形

目录 1、数据类型介绍 1.1、类型的基本归类 整形家族 浮点数家族 指针类型 空类型 构造类型 2、整形在内存中的存储 2.1、原码、反码、补码 2.2、大小端介绍 2.3、有符号与无符号 2.4、练习 例一 例二 例三 例四 例五 1、数据类型介绍 我们先来简单了解一下我们前面所学的基…

【特征选择】基于二进制粒子群算法的特征选择方法(PNN概率神经网络分类)【Matlab代码#33】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 特征选择问题2. 二进制粒子群算法3. 概率神经网络&#xff08;PNN&#xff09;分类4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&…

服务(第三十二篇)nginx做缓存服务器

nginx作为缓存服务配置语法 1、proxy_cache_path 配置语法&#xff08;即缓存路径配置语法&#xff09; Syntax&#xff1a;proxy_cache_path path [levelslevels] [use_temp_pathon|off] keys_zonename:size [inactivetime] [max_sizesize] [manager_filesnumber] [manager_s…