南阳住房和城乡建设管理局网站wordpress门户主体

web/2025/10/7 22:07:39/文章来源:
南阳住房和城乡建设管理局网站,wordpress门户主体,网站建设.国风网络,怎么开发微信公众号呢js设计模式 设计模式#xff08;Design pattern#xff09;代表了最佳的实践#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误…js设计模式 设计模式Design pattern代表了最佳的实践通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 而虽然js前端使用设计模式不像后端那么频繁但是依然是一名程序员必备的本领本文通过使用实例方便大家理解记忆设计模式可用于面试前速记。 一. 设计模式介绍 在js设计模式中核心封装变化。 将变与不变分离确保变化灵活不变稳定。 构造器原型模式 使用设计模式前 var employee1 {name:zs,age:18}var employee2 {name:ls,age:19}在构造对象时如果数据量变多对象的代码会变得冗余臃肿 使用设计模式后 function Employee(name,age){this.name name;this.age age;this.say function(){console.log(this.name-,this.age)} } new Employee(zs,18) new Employee(ls,19)工厂模式 由一个工厂对象决定创建某一种产品的对象类的实例。主要用来创建同一类对象。 只需要传入参数就能返回具体的实例。 function UserFactory(role){function User(role,pages){this.role role;this.pages pages;}switch(role){case superadmin:return new User(superadmin,[home,user-manage,right-manage,news-manage])break;case admin:return new User(admin,[home,user-manage,news-manage])break;case editor:return new User(editor,[home,news-manage])break;default:throw new Error(参数错误)} }抽象工厂模式 相比于工厂模式抽象工厂模式会抽离出一个不变的公共父类。其子类就是各种的不同类。再通过函数判断返回这写不同的类。它并不会直接生成可用实例。而是返回不同的类让开发者得到想要的类后自行实例化。 class User {constructor(name) {this.name name}welcome() {console.log(欢迎回来, this.name)}dataShow() {throw new Error(抽象方法不允许直接调用)} }class Editor extends User {constructor(name) {super(name)this.role editorthis.pages [home, news-manage]}dataShow() {console.log(editor的可视化逻辑)} }class Admin extends User {constructor(name) {super(name)this.role adminthis.pages [home, user-manage, news-manage]}dataShow() {console.log(admin的可视化逻辑)}AddUser() {console.log(adduser方法)} }class SuperAdmin extends User {constructor(name) {super(name)this.role superadminthis.pages [home, user-manage, right-manage, news-manage]}dataShow() {console.log(superadmin的可视化逻辑)}AddUser() {console.log(adduser方法)}AddRight() {console.log(addright方法)} }function getAbstractUserFactory(role) {switch (role) {case superadmin:return SuperAdmin;break;case admin:return Admin;break;case editor:return Editor;break;default:throw new Error(参数错误)} }建造者模式 假如你是一个工厂的设计师同过前面的工厂或抽象工厂模式已经获得了一个个独立的零件。接下来要拼接在一起成一个新的大零件。你现在已经不需要关心小零件构造只需要关心大零件的组成结构与顺序。这就是建造者模式 class Navbar {//没一个类的细节都不同init() {console.log(navbar-init)}getData() {return new Promise((resolve) {setTimeout(() {resolve()console.log(navbar-getData)}, 1000)})}render() {console.log(navbar-render)} } class List {init() {console.log(List-init)}getData() {return new Promise((resolve) {setTimeout(() {resolve()console.log(List-getData)}, 1000)})}render() {console.log(List-render)} }class Operator {async startBuild(builder) {//设计师只关心这个函数中代码的运行逻辑await builder.init()await builder.getData()await builder.render()} }const op new Operator(); const navbar new Navbar(); const list new List(); op.startBuild(navbar); op.startBuild(list); 单例模式 作为设计师的你有一个工具包工具包里有且只有一个趁手的工具。你每次都只会使用这个工具。然而一开始你并没有工具包你可以买一个并一直使用这一个 为防止全局污染可以使用闭包来封闭一个变量这就是单例模式的原理。 保证一个类仅有一个实例并提供一个访问它的全局访问点。 主要解决一个全局使用的类频繁地创建和销毁占用内存。 const Modal (function () {let modal nullreturn function () {//返回一个类但是由于modal变量访问了外层作用域所以缓存不会立即释放if (!modal) {modal document.createElement(div)modal.innerHTML 登录对话框modal.className kerwin-modalmodal.style.display nonedocument.body.appendChild(modal)}return modal}})()document.querySelector(#open).addEventListener(click, function () {const modal new Modal()modal.style.display block})document.querySelector(#close).addEventListener(click, function () {const modal new Modal()modal.style.display none})装饰器模式 假设工厂中生产的是一台电视在设计电视时总会有开机广告这是固定好的但又跟电视本身的内容无关联那么开机广告就是有前置装饰器设置的。 对已有功能进行拓展这样不会更改原有代码对其他的业务产生影响这方便我们在较少的改动下对软件进行拓展。 Function.prototype.before function (beforeFn) {var _this this;return function () {beforeFn.apply(this, arguments);return _this.apply(this, arguments);};}; Function.prototype.after function (afterFn) {var _this this;//函数体本省return function () {//返回一个新的函数var ret _this.apply(this, arguments);afterFn.apply(this, arguments);return ret;}; };function test() {console.log(11111) } var test1 test.before(() {console.log(00000) }).after((){console.log(22222) })test1()适配模式 工厂中的水管并不是大小一样的这时候使用一个首尾大小不一样的适配器工具可以解决此问题 可以理解为类中的函数柯里化 将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作比如在原本的函数外再嵌一个函数这样调用函数名变了但我们使用适配器改变了原有的函数名变为了调用的函数名这在以下项目中更改接口api很有用 //按照官网代码复制 class TencentMap {show() {console.log(开始渲染腾讯地图);} } //按照官网代码复制 class BaiduMap {display() {console.log(开始渲染百度地图);} }class BaiduMapAdapter extends BaiduMap {constructor() {super();}render() {this.display();} } class TencentMapAdapter extends TencentMap {constructor() {super();}render() {this.show();} } // 外部调用者 function renderMap(map) {map.render(); // 统一接口调用 } renderMap(new TencentMapAdapter()); renderMap(new BaiduMapAdapter());策略模式 假如你作为设计师处理一件很复杂的事情你可以选择一个人扛也可以选择采用身边助理的意见。策略模式就是如此。将if else分开放到对象中去。这样想要加逻辑时就不必关注if else的先后顺序。 var list [{title: 男人看了沉默,type: 1},{title: 震惊,type: 2},{title: kerwin来了,type: 3},{title: tiechui离开了,type: 2}]let obj {1: {content: 审核中,className: yellowitem},2: {content: 已通过,className: greenitem},3: {content: 被驳回,className: reditem}}mylist.innerHTML list.map(item lidiv${item.title}/div div class${obj[item.type].className}${obj[item.type].content}/div /li).join()代理模式 代理模式Proxy为其他对象提供一种代理以控制对这个对象的访问。 代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象文件资源内存中的对象或者是一些难以复制的东西。 准确来说就好似Proxy进行代理通过其代理功能可以过滤掉一些禁用。缺点是必须访问代理后的对象不会影响原有对象。vue3响应式底层原理 let obj {} let proxy new Proxy(obj,{get(target,key){console.log(get,target[key])return target[key]},set(target,key,value){console.log(set,target,key,value)if(keydata){box.innerHTML value}target[key] value} })观察者模式 作为总设计师会有许多手下他们都是看你办事你要是发出号令他们就得相应做出变化 一个被观察对象有许多观察者对象被观察者变化观察者发生相应变化。 class Sub {constructor() {this.observers []}add(observer) {this.observers.push(observer)}remove(observer) {this.observers this.observers.filter(item item ! observer)}notify() {this.observers.forEach(item item.update())} }class Observer {constructor(name) {this.name name}update() {console.log(通知了, this.name)} } const observer1 new Observer(kerwin) const observer2 new Observer(tiechui)const sub new Sub() sub.add(observer1) sub.add(observer2)setTimeout(() {sub.notify() }, 2000)发布订阅模式 虽然作为总设计师有很大权利但总是有上级的上级有时会发布一些任务下来这些任务有的不是立即完成你可以记录下来。到了时候再完成即可。 观察者模式观察者和目标要相互知道 发布订阅模式发布者和订阅者不用互相知道通过第三方实现调度属于经过解耦合的观察者模式 class SubPub {constructor() {this.message {}//记录本}subscribe(type, fn) {if (!this.message[type]) {this.message[type] [fn]} else {this.message[type].push(fn)}}publish(type, ...arg) {if (!this.message[type]) returnconst event {type: type,arg: arg || {}}// 循环执行为当前事件类型订阅的所有事件处理函数this.message[type].forEach(item {item.call(this, event.arg)})}}与观者不同的是订阅的是事件而非对象,而且有不同的记录本记录不同的事 14. 模块化模式 模块化模式最初被定义为在传统软件工程中为类提供私有和公共封装的一种方法。 能够使一个单独的对象拥有公共/私有的方法和变量从而屏蔽来自全局作用域的特殊部分。这可以减少我们的函数名与在页面中其他脚本区域内定义的函数名冲突的可能性。 早前模块化是由闭包完成 var testModule (function () {var count 0;return {increment () {return count;},reset: function () {count 0;},decrement(){return --count;}};})();模块化 export default {name:moduleA,test(){return test} }script typemoduleimport moduleA from ./1.jsconsole.log(moduleA) /script迭代器模式 为遍历不同数据结构的 “集合” 提供统一的接口 能遍历访问 “集合” 数据中的项不关心项的数据结构 // 统一遍历接口实现 var kerwinEach function (arr, callBack) {for (let i 0; i arr.length; i) {callBack(i, arr[i])} }// 外部调用 kerwinEach([11, 22, 33, 44, 55], function (index, value) {console.log([index, value]);var oli document.createElement(li)oli.innerHTML valuelist.appendChild(oli) })指责链模式 Promise的then链式调用采用的就是这种模式 使多个对象都有机会处理请求从而避免了请求的发送者与多个接收者直接的耦合关系将这些接收者连接成一条链顺着这条链传递该请求直到找到能处理该请求的对象。 btn.addEventListener(click, function (event) {checks.check() });function checkEmpty() {if (input.value.length 0) {console.log(这里不能为空);return}return next }function checkNumber() {if (Number.isNaN(input.value)) {console.log(这里必须是数字);return}return next }function checkLength() {if (input.value.length 6) {console.log(这里要大于6个数字);return}return next }class Chain {constructor(fn) {this.checkRule fn || (() next);this.nextRule null;}addRule(nextRule) {this.nextRule new Chain(nextRule);return this.nextRule;//不断返回实例实现链式调用}end() {this.nextRule {check: () end};}check() {this.checkRule() next ? this.nextRule.check() : null;} }const checks new Chain(); checks.addRule(checkEmpty).addRule(checkNumber).addRule(checkLength).end();最后还有一种不算设计模式但是非常有用的模式名为函数柯里化 试想一下你要打印一个日志它的内容是时间类型以及内容 很明显时间在一天中日期是不会变的类型也就那么几种唯独内容每次都不一样 但是前面两个参数只是不会频繁变化但却不能完全写死。 这时需要一个容器记住前面两个参数。大家可能会想到使用Object对象但是不要忘了函数也是对象合理利用函数闭包完全可以优雅的解决这个棘手的问题。 function logs(x){return function(y){return function(z){console.log(时间${x}类型${y}内容${z})}} } let logDatelogs(new Date().toLocaleDateString())//这个容器保存当天时间 let logDateErrorlogDate(error)//定义不同类型 let logDateSuccesslogDate(success) let message1logDateError(错误信息1)//填写完全不同的内容 let message1logDateError(错误信息2) let message2logDateSuccess(成功信息1)这样写logs函数大家可能担心陷入回调地狱凡是关于回调地狱都可以使用递归解决 自动封装函数 function currying(fn) {let curryFn function (...args) {if (args.length fn.length) {return fn(...args)} else {return function (...newArgs) {return curryFn(...args, ...newArgs)}}}return curryFn }function test(a, b, c) {console.log(a, b, c) } var testCurrying currying(test)//放入该函数即可自动生成 testCurrying(1)(2)(3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泉州手机网站建设费用手机做广告设计用什么软件

这两题好像是一样的,就是3177要去掉重边。 但是为什么要去重边呢??????我认为如果有重边的话,应该也要考虑在内才是。 这两题我用了求割边,在去掉割边,用DFS缩…

制作好网站怎么导入中山网站网站建设

MAC下的SVN服务器建立: from : http://blog.csdn.net/q199109106q/article/details/8655204 在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件…

建设一个机械公司网站多少钱1688官网首页

中断处理是整个运行系统中优先级最高的代码,可以抢占任何任务级代码运行。中断机制是多任务环境运行的基础,是系统实时性的保证。几乎所有的实时多任务操作系统都需要一个周期性系统时钟中断的支持,用以完成时间片调度和延时处理。VxWorks 提…

竞价网站服务器做网站界面一般用什么来做

1. Spring单例Bean是不是线程安全的? Spring单例Bean默认并不是线程安全的。由于多个线程可能访问同一份Bean实例,当Bean的内部包含了可变状态(mutable state)即有可修改的成员变量时,就可能出现线程安全问题。Spring容器不会自动…

电子商务网站建设与管理课程的意义湖南平台网站建设制作

01 传统企业数字化转型面临诸多挑战 即将过去的2023年,chatGPT大模型、数据资产入表等事件的发生,标志着数字经济正在加速发展。数字经济是人类社会继农业经济、工业经济之后的第三种经济形态,将推动生产方式、生活方式和治理方式深刻变革&a…

网站建设方案功能寻找南京帮助做网站的单位

目录 1 概述 2 数学模型 2.1 问题表述 2.2 DG的最佳位置和容量(解析法) 2.3 使用 GA 进行最佳功率因数确定和 DG 分配 3 仿真结果与讨论 3.1 33 节点测试配电系统的仿真 3.2 69 节点测试配电系统仿真 4 结论 1 概述 为了使系统网损达到最低值&a…

免费模板简历在哪下太原网站优化步骤

目录 背景介绍及应用 学习目标 原理 Sobel算子和Scharr算子 Laplacian 算子 代码示例 重要提醒 背景介绍及应用 图像的梯度是指图像中每个像素点的强度变化情况。计算图像的梯度可以帮助我们了解图像中物体的边界和纹理等信息。梯度在计算机视觉和图像处理领域有着广泛…

网站推广淘宝联盟怎么做花生棒做网站

目录 一、下载软件安装包 二、运行安装包后 一、下载软件安装包 打开vscode官方网址,找到下载界面 链接如下:Download Visual Studio Code - Mac, Linux, Windows 我是windows电脑,各位小伙伴自己选择合适的版本,点击下载按钮…

哪个网站收录排名好个人做网站做什么样的话

一、概述两个月前,我们发布了搭载独立开发的“深度桌面环境”的 Linux Deepin 12.12 Alpha 版本。现在,Linux Deepin 12.12 Beta 版本来了!Beta 版本集成了 Linux Deepin 两个多月以来的工作成果,带来了许多激动人心的新功能与特性…

建设银行辽宁省分行网站esuwiki wordpress

文章目录 前言一、I2C的结构层次1.1 怎样在两个设备之间传输数据1.2 I2C如何传输数据1.3 硬件框图1.4 软件层次 二、IIC协议2.1 硬件连接2.2 I2C 总线的概念2.3 传输数据类比2.3 I2C信号2.4 I2C数据的含义 总结 前言 I2C(Inter-Integrated Circuit)是一…

徐州网站建设找哪家小程序制作单位

Vite创建Vue项目后遇到的问题 前言问题问题一问题二问题三问题四 补充 前言 Vite 创建 Vue项目还算顺利,但创建后不是万事大吉,遇到了各种的问题。现在就自己遇到的问题做个总结。 问题 问题一 创建后,在未修改任何配置的前提下&#xff0c…

模块网站需要多少钱苏州建设银行官方网站

目录 1.拦截器1.1.什么是拦截器?1.2 拦截器的API1.3 拦截器的执行顺序1.5 自定义拦截器1.5 登录拦截器案例 2.文件上传2.1 添加依赖2.2 配置文件上传解析器2.3 编写控制器2.4 编写jsp页面2.5 注意事项 3.全局异常处理器3.1 异常处理思路3.2 创建异常处理器3.3 编写异…

图片渐隐 网站头部flash建设隔热网站

一 Button 按钮 Button是按钮组件,通常用于响应用户的点击操作,可以加子组件 Button(我是button)Button(){Text(我是button)}type 按钮类型 Button有三种可选类型,分别为胶囊类型(Capsule)、圆形按钮(Circle&#xf…

无锡seo报价seo交流博客

网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWidth (包括边线和滚动条的宽) 网页可见区域高:document.body.offsetHeight(包括边线的宽) 网页正文全…

餐饮品牌设计网站wordpress 免备案空间

摘 要 随着我国经济的飞速发展,促使各种能源使用入不敷出,尤其是最主要的能源,煤炭石油资源不断消耗与短缺,因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点,且分布范围广&…

查网站服务器ip 被k简单asp网站源码

套餐管理 1 任务2 新增套餐2.1 需求分析和设计页面原型和业务规则接口设计setmeal和setmeal_dish表设计 2.2 代码开发2.2.1 根据分类id查询菜品DishControllerDishServiceDishServiceImplDishMapperDishMapper.xml 2.2.2 新增套餐接口SetmealControllerSetmealServiceSetmealSe…

淮安市广德育建设网站工友洗手粉网站建设中

声明:只是记录,初心是为了让页面更好看,会有错误,我并不是一个会记录的人,所以有点杂乱无章的感觉,我先花点时间把视频迅速过掉,再来整理这些杂乱无章的内容 计划是一天更新一点 待做的东西 完成博客记录把完成后的博客记录拆成单…

酒店网站建设必要性wordpress伪静态作用

一、贪心算法 贪心算法是一种解决优化问题的算法设计方法,其核心思想是在每一步选择当前状态下的最优解,从而希望最终达到全局最优解。下面将介绍贪心算法的原理、实现步骤,并提供C#和Java的实现示例。 1.1 原理: 贪心算法的原…

万峰科技著.asp.net网站开发四酷全书电子工业出版社做网站卖东西送上门

番茄钟番茄工作法是简单易行的时间管理方法。使用番茄工作法,选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事。直到番茄时钟响起,然后进行短暂休息一下(5分钟就行&…

有没有必要给企业做网站顺义哪有做网站厂家

Unable to start embedded Tomcat(已解决) 一、背景介绍二、原因分析2.1 网络上整理2.2 其他原因 三、解决方案 一、背景介绍 spring boot(v2.5.14) maven idea 启动项目 之前项目一直启动的好好的,都能正常运行。重启的时候突然就不能启…