【JSOO】设计模式
- 单例模式
- 工厂模式
- 状态模式
- 观察者模式
- 桥接模式
设计模式(是一种通过经验中总结出来的经过反复验证能够解决一类通用问题的可以反复重用的就可称它为模式,否则只能称为功能模块);模式:把解决问题的方法抽取出来,形成一种通用范例
单例模式
单例模式(只需要一个对象产生,不需要反复产生多个对象)
<head><link rel="stylesheet" href="3.util.css">
</head>
<body><button onclick="test()">弹出遮罩层</button><script src="3.util.js"></script><script>let myObj={};//json数据就是依照单例模式的概念产生的数据模式let obj={name:"月月",age:24,method1:{f1(){return "f1";},f2(){return "f2";}}}//弹出遮罩层案例function test() {/*let div=createDiv(); //返回的对象div.show();*/createDiv();}</script>
</body>
3.util.js文件
/*let createDiv=function () {let div=document.createElement("div");div.className="layer";document.body.appendChild(div); // 放到页面显示出来let show=function () {div.style.display="block";document.body.style.overflow="hidden"}return {show,}//应该只create一次,不然每次点击都创建div,可能会造成反复叠加
}*/// 正确写法
let createDiv=(function () {let div;return function () {if(div==undefined){div=document.createElement("div");div.className="layer";document.body.appendChild(div)}let show=function () {div.style.display="block";document.body.style.overflow="hidden"}show();}
})()
3.util.css文件
body{height: 1500px;
}
.layer{position: absolute;top:30px;left:0;width: 100%;height: 100%;background-color: black;opacity: 0.3;display: none;
}
效果

示例:
/*野兽约美女,主动微信联系1.需要两个对象,美女+野兽2.需要通过微信3.先看美女有没有微信,如果有微信就直接通过微信联系,如果没有就先安装微信4.两个单例之间开始通信
*///野兽
let yeShou={callMeiNv:function (msg) {let Mn=meiNv.getMessage(msg);alert(Mn.weChar)}
}//美女
let meiNv=(function () { //meiNv={}let wxApp=function(message) { //微信构造函数this.weChar=message}let weChar;let info={ //美女信息getMessage:function (message) {console.log(message)if(!weChar){ //没有微信weChar=new wxApp(message)}return weChar; //对象,wxmini.wxmini}}return info;
})()yeShou.callMeiNv("一起吃饭吗?")
工厂模式
//类似于做架构(只需要调函数传参数)
function createPerson() {function Person() {//一定会得到人,但是是个什么样的人,不确定(弊端是不留接口的话Person()不能扩展)}let a=new Person();return a;
}
// new Person(); 不可用,因为Person()在createPerson()中,改不到
createPerson();function Plane() {}
Plane.prototype.speed=30; //可随意更改模板//原型模式
function student() {}
student.prototype.name="月亮";
student.prototype.work=function () {}//构造函数
function myStudent(name) {this.name=name;this.work=function () {}
}
console.log(new myStudent("月月")) //有constructor属性/* 原型+构造(工作中使用)*/
function emp(name) {this.name=name;
}
// emp.prototype.work=function () {
//
// } 有constructor属性emp.prototype={work(){},study(){},//解决没有constructor属性(自己加上去)constructor:emp
}
console.log(new emp("月亮")) //没有constructor属性class Demo{constructor() {//属性}//方法
}
状态模式
<button onclick="myMove('jump')">跳</button>
<button onclick="myMove('run')">跑</button>
<button onclick="myMove('walk')">走</button><script>function myMove(a) {obj[a]();}let obj={jump(){console.log("跳")},run:function () {console.log("跑")},walk(){console.log("走")}}/*let obj={method1(){console.log("method1")},method2(){console.log("method2")},method3(){console.log("method3")},}let a=1;if(a==1){obj.method1()}else if(a==2){obj.method2()}else if (a==3){obj.method3()}let a="method1";obj[a]();*/
</script>
观察者模式
<div id="box">观察者模式</div><script>document.getElementById("box").addEventListener("click", function () {alert("hello 世界")})//vue---Object.defineProperty() 参考:js笔记中的数据双向绑定原理/*观察者模式,属于行为模式的一种,定义了一对多的依赖关系,让多个观察者同时监听一个主题对象,这个主题对象在状态发生变化的时候,会通知所有的观察者,使他们自动更新。和观察者模式很像的:发布订阅模式*/
</script>
桥接模式
桥接方式:降低代码耦合度
<!--
<input type="button" value="300x300" id="inp1" οnclick="changeSize(this)">
<input type="button" value="500x500" id="inp2" οnclick="changeSize(this)">
<input type="button" value="700x700" id="inp3" οnclick="changeSize(this)">
--><input type="button" value="300x300" id="inp1">
<input type="button" value="500x500" id="inp2">
<input type="button" value="700x700" id="inp3"><div><img src="duorou.jpg" alt="">
</div><script>//普通方式:/*function changeSize(obj) {let btnValue=obj.value;btnValue=btnValue.split("x")console.log(btnValue)let size={width:btnValue[0],height:btnValue[1]}let imgObj=document.getElementsByTagName("img")[0];imgObj.style.width=size.width+"px";imgObj.style.height=size.height+"px";}*///桥接方式:降低代码耦合度let changeSize=function (btnValue) {let bValue=btnValue.split("x");let size={width:bValue[0],height:bValue[1]}let imgObj=document.getElementsByTagName("img")[0];imgObj.style.width=size.width+"px";imgObj.style.height=size.height+"px";}// changeSize("100x100") 每一段都可以单独执行//桥let changeSizeBridge=function (e) {let val=e.target;console.log(val.value);changeSize(val.value)}//绑定事件function addEvent(eleObj,eName,eMethod) { //3个参数:元素对象,事件名称,方法let obj=document.getElementById(eleObj); //找到页面的节点if("click"==eName){obj.onclick=function () {eMethod(event)}}}addEvent("inp1","click",changeSizeBridge)addEvent("inp2","click",changeSizeBridge)addEvent("inp3","click",changeSizeBridge)</script>
相关文章:
【JSOO】设计模式
单例模式工厂模式状态模式观察者模式桥接模式 设计模式(是一种通过经验中总结出来的经过反复验证能够解决一类通用问题的可以反复重用的就可称它为模式,否则只能称为功能模块);模式:把解决问题的方法抽取出来ÿ…...
本草纲目数字化:Spring Boot在中药实验管理中的应用
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理中药实验管理系统的相关信息成为必然。开发…...
java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程
文章目录 PC Register堆虚拟机栈方法区(Metaspace元空间双亲委派机制类加载器 类装载的执行过程 PC Register 程序计数器(Program Counter Register)是 Java 虚拟机(JVM)中的一个组件,它在 JVM 的内存模型中扮演着非常…...
重构Action-cli前端脚手架
一、概述 最近一年,为了满足公司业务开发,解决重复搭建项目繁琐过程,自己开发了一个前端脚手架,并发布到npm。随着时间的推移,发现之前的版本存在很多问题,有些功能做不到位,而且代码也不是很规…...
华为USG5500防火墙配置NAT
实验要求: 1.按照拓扑图部署网络环境,使用USG5500防火墙,将防火墙接口加入相应的区域,添加区域访问规则使内网trust区域可以访问DMZ区域的web服务器和untrust区域的web服务器。 2.在防火墙上配置easy-ip,使trust区域…...
【大数据学习 | HBASE高级】hive操作hbase
一般在查询hbase的数据的时候我们可以直接使用hbase的命令行或者是api进行查询就行了,但是在日常的计算过程中我们一般都不是为了查询,都是在查询的基础上进行二次计算,所以使用hbase的命令是没有办法进行数据计算的,并且对于hbas…...
集群聊天服务器(9)一对一聊天功能
目录 一对一聊天离线消息服务器异常处理 一对一聊天 先新添一个消息码 在业务层增加该业务 没有绑定事件处理器的话消息会派发不出去 聊天其实是服务器做一个中转 现在同时登录两个账号 收到了聊天信息 再回复一下 离线消息 声明中提供接口和方法 张三对离线的李…...
《FreeRTOS列表和列表项篇》
FreeRTOS列表和列表项 1. 什么是列表和列表项?1.1 列表list1.2 列表项list item 2. 列表和列表项的初始化2.1 列表的初始化2.2 列表项的初始化 3. 列表项的插入4. 列表项末尾插入5. 列表项的删除6. 列表的遍历 列表和列表项是FreeRTOS的一个数据结构,是F…...
C++:哈希拓展-位图
目录 一.问题导入 二.什么是位图? 2.1如何确定目标数在哪个比特位? 2.2如何存放高低位 2.3位图模拟代码实现 2.3.1如何标记一个数 2.3.2如何重置标记 2.3.3如何检查一个数是否被标记 整体代码实现 标准库的Bitset 库中的bitset的缺陷 简单应用 一.问题导入 这道…...
【数据结构与算法】查找
文章目录 一.查找二.线性结构的查找2.1顺序查找2.2折半查找2.3分块查找 三.树型结构的查找3.1二叉排序树1.定义2.二叉排序树的常见操作3.性能分析 3.2平衡二叉树1.定义2.平衡二叉树的常见操作3.性能分析 3.3B树1.定义2.B树的相关操作 3.4B树1.定义2.B树与B树的比较 四.散列表1.…...
从零开始学习 sg200x 多核开发之 milkv-duo256 编译运行 sophpi
sophpi 是 算能官方针对 sg200x 系列的 SDK 仓库 https://github.com/sophgo/sophpi ,支持 cv180x、cv81x、sg200x 系列的芯片。 SG2002 简介 SG2002 是面向边缘智能监控 IP 摄像机、智能猫眼门锁、可视门铃、居家智能等多项产品领域而推出的高性能、低功耗芯片&a…...
LLM - 使用 LLaMA-Factory 微调大模型 Qwen2-VL SFT(LoRA) 图像数据集 教程 (2)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/143725947 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 LLaMA-…...
基于STM32设计的大棚育苗管理系统(4G+华为云IOT)_265
文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 参考文献1.6 系统框架图1.7 系统原理图1.8 实物图1.9…...
深入浅出《钉钉AI》产品体验报告
1. 引言 随着人工智能技术的迅猛发展,企业协同办公领域迎来了新的变革。钉钉作为阿里巴巴集团旗下的企业级通讯与协同办公平台,推出了钉钉AI助理,旨在提高工作效率,优化用户体验。本报告将对钉钉AI助理进行全面的产品体验分析&am…...
2020年计挑赛往届真题(C++)
因为17号要开赛了,甚至是用云端编辑器,debuff拉满,只能临时抱佛脚了 各个选择题的选择项我就不标出来了,默认ABCD排,手打太麻烦了 目录 单选题: 1.阅读以下语句:double m0;for(int i3;i>0;i--)m1/i;…...
ES6进阶知识二
一、promise方法的案例 Promise对象通过new Promise()语法创建,它接受一个函数作为参数,该函数接受两个参数:resolve和reject。resolve表示异步操作成功,reject表示异步操作失败。 案例:异步加载图片 const loadIma…...
大语言模型通用能力排行榜(2024年10月8日更新)
数据来源SuperCLUE 榜单数据为通用能力排行榜 排名 模型名称 机构 总分 理科 文科 Hard 使用方式 发布日期 - o1-preview OpenAI 75.85 86.07 76.6 64.89 API 2024年11月8日 - Claude 3.5 Sonnet(20241022) Anthropic 70.88 82.4…...
第六节、Docker 方式部署指南 github 上项目 mkdocs-material
一、简介 MkDocs 可以同时编译多个 markdown 文件,形成书籍一样的文件。有多种主题供你选择,很适合项目使用。 MkDocs 是快速,简单和华丽的静态网站生成器,可以构建项目文档。文档源文件在 Markdown 编写,使用单个 YAML 配置文件配置。 MkDocs—markdown项目文档工具,…...
【MySQL】MySQL中的函数之JSON_REPLACE
在 MySQL 中,JSON_REPLACE() 函数用于在 JSON 文档中替换现有的值。如果指定的路径不存在,则 JSON_REPLACE() 不会修改 JSON 文档。如果需要添加新的键值对,可以使用 JSON_SET() 函数。 基本语法 JSON_REPLACE(json_doc, path, val[, path,…...
【大数据学习 | HBASE高级】hbase的API操作
首先引入hbase的依赖 <dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>2.4.13</version></dependency><dependency><groupId>org.slf4j<…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
