常见的JavaScript设计模式(一)

news/2024/11/14 21:46:44/

常见的JavaScript设计模式

  • 一、模块模式(Module Pattern)
  • 二、单例模式(SingIeton Pattern)
  • 三、工厂模式(Factory Pattern)
  • 四、观察者模式(Observer Pattern)

常见的JavaScript设计模式包括 模块模式在这里插入代码片 单例模式工厂模式观察者模式、策略模式、装饰者模式等。每种设计模式都有其特定的和应用场景和解决方案,可以根据具体的需求选择合适的设计模式来提高代码的质量和可维护性。

一、模块模式(Module Pattern)

用于将代码封装为具有特定功能的独立模块。

javascript">const myModule=(function () {let privateVarible="This is private";function privateMethod() {console.log(privateVarible);}return {publicMethod(){privateMethod();},};
})();

二、单例模式(SingIeton Pattern)

确保一个类只有一个实例,并提供全局访问点来访问该实例。

javascript">const singleton = (function () {let instance;function creatInstance() {return {name: 'Singleton Instance',};}return {getInstance() {if (!instance) {instance = creatInstance();}return instance;},};
})();const instance1 = singleton.getInstance();
const instance2 = singleton.getInstance();
console.log(instance1 === instance2);

三、工厂模式(Factory Pattern)

提供了一种封装对象创建过程的方式,使得客户端代码与具体对象的创建逻辑解耦。

javascript">function createUser(name,role) {return {name,role,sayHello(){console.log(`name is ${this.name} and I am a ${this.role}`);}}
}const admain = createUser("Alice","admain");
admain.sayHello();

四、观察者模式(Observer Pattern)

观察者模式是一种对象间的对多的依赖关系,当一个对象的状态发生变化时,它的所有依赖对象都会收到通知并自动更新。

javascript">function Subject() {this.observers = [];
}
Subject.prototype = {// 订阅subscribe(observer) {this.observers.push(observer);},// 取消订阅unsubscribe(observer) {this.observers = this.observers.filter((obs) => objs !== observer);},// 通知notify(data) {this.observers.forEach((observer) => observer.update(data));},
};
// 观察者
function Observer(name) {this.name = name;
}
Observer.prototype.update = function (data) {console.log(`${this.name} received data: ${data}`);
};const subject = new Subject();
const observer1 = new Observer('observer1');
const observer2 = new Observer('observer2');
subject.subscribe(observer1);
subject.subscribe(observer2);
subject.notify('New data availabel');

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

相关文章

添加AXI主IP(AXI4 Lite和AXI4)示例

添加AXI主IP(AXI4 Lite和AXI4)示例 将等效IP添加到框图中。以下是AXI Central的示例步骤 直接存储器存取(CDMA): 1.右键单击方框图中的任意位置,然后选择“添加IP”。 2.搜索并双击AXI Central Direct Memo…

强化学习_06_pytorch-PPO2实践(Humanoid-v4)

一、PPO优化 PPO的简介和实践可以看笔者之前的文章 强化学习_06_pytorch-PPO实践(Pendulum-v1) 针对之前的PPO做了主要以下优化: -笔者-PPO笔者-PPO2refdata collectone episodeseveral episode(one batch)activationReLUTanhadv-compute-compute adv as one seri…

C-数据结构-树状存储基本概念

‘’’ 树状存储基本概念 深度(层数) 度(子树个数) 叶子 孩子 兄弟 堂兄弟 二叉树: 满二叉树: 完全二叉树: 存储:顺序,链式 树的遍历:按层遍历&#xff0…

springboot相关知识集锦----1

一、springboot是什么? springboot是一个用于构建基于spring框架的独立应用程序的框架。它采用自动配置的原则,以减少开发人员在搭建应用方面的时间和精力。同时提升系统的可维护性和可扩展性。 二、springboot的优点 约定优于配置 版本锁定&#xf…

【建议收藏】30个较难Python脚本,纯干货分享

本篇较难,建议优先学习上篇 ;20个硬核Python脚本-CSDN博客 接上篇文章,对于Pyhon的学习,上篇学习的结束相信大家对于Pyhon有了一定的理解和经验,学习完上篇文章之后再研究研究剩下的30个脚本你将会有所成就&…

《AI学习笔记》大模型-微调/训练区别以及流程

阿丹: 之前一直对于大模型的微调和训练这两个名词不是很清晰,所有找了一个时间来弄明白到底有什么区别以及到底要怎么去使用去做。并且上手实践一下。 大模型业务全流程: 大模型为啥要微调?有哪些微调方式? 模型参数…

C++:vector基础讲解

hello,各位小伙伴,本篇文章跟大家一起学习《C:vector基础讲解》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞!&#…

Nodejs 第七十三章(网关层)

什么是网关层(getway)? 技术选型fastify 速度快适合网关层 fastify教程上一章有讲 网关层是位于客户端和后端服务之间的中间层,用于处理和转发请求。它充当了请求的入口点,并负责将请求路由到适当的后端服务,并将后端服务的响应…