范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

前端常用的5种设计模式

  今天主要介绍一下我们平常会经常用到的设计模式,设计模式总的来说有23种。而设计模式在前端中又该怎么运用呢,接下来主要对比较前端中常见的设计模式做一个简单的介绍。
  设计模式的定义
  设计模式是在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。在不同的编程语言中,对设计模式的实现其实是可能会有区别的。
  比如java和javascript,在Java这种静态编译型语言中,无法动态地给已存在的对象添加职责,所以一般通过包装类的方式来实现装饰者模式。但在JavaScript这种动态解释型语言中,给对象动态添加职责是再简单不过的事情。这就造成了JavaScript语言的装饰者模式不再关注于给对象动态添加职责,而是关注于给函数动态添加职责。
  本篇将介绍以下几个比较常见的设计模式:工厂模式单例模式代理模式观察者模式策略模式
  一、工厂模式
  工厂模式是用来创建对象的一种最常用的设计模式,不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂,工厂模式根据抽象程度的不同可以分为:简单工厂,工厂方法和抽象工厂,接下来,将对简单工厂和工厂方法在JavaScript中的运用举个简单的例子:
  1. 简单工厂
  简单工厂模式又叫静态工厂模式,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类对象
  比如说,在实际的项目中,我们常常需要根据用户的权限来渲染不同的页面,高级权限的用户所拥有的页面有些是无法被低级权限的用户所查看,所以我们可以在不同权限等级用户的构造函数中,保存该用户能够看到的页面。
  总结:在上面的例子中,UserFactory就是一个简单工厂,在该函数中有3个构造函数分别对应不同的权限的用户,当我们调用工厂函数时,只需要传递superAdmin, admin, user这三个可选参数中的一个获取对应的实例对象
  优点:简单工厂的优点在于,你只需要一个正确的参数,就可以获取到你所需要的对象,而无需知道其创建的具体细节;缺点:在函数内包含了所有对象的创建逻辑(构造函数)和判断逻辑的代码,每增加新的构造函数还需要修改判断逻辑代码,我们的对象不是上面的3个而是30个或更多时,这个函数会成为一个庞大的超级函数,便得难以维护,简单工厂只能作用于创建的对象数量较少,对象的创建逻辑不复杂时使用。
  2. 工厂方法
  工厂方法模式的本意是将实际创建对象的工作推迟到子类中,这样核心类就变成了抽象类,但是在JavaScript中很难像传统面向对象那样去实现创建抽象类,所以在JavaScript中我们只需要参考它的核心思想即可,我们可以将工厂方法看作是一个实例化对象的工厂类
  比如说上面的例子,我们用工厂方法可以这样写,工厂方法我们只把它看作是一个实例化对象的工厂,它只做实例化对象这一件事情,我们采用安全模式创建对象
  总结:在简单工厂中,如果我们新增加一个用户类型,需要修改两个地方的代码,一个是增加新的用户构造函数,一个是在逻辑判断中增加对新的用户的判断,而在抽象工厂方法中,我们只需要在UserFactory.prototype中添加就可以啦。
  二、单例模式
  定义:是保证一个类只有一个实例,并且提供一个访问它的全局访问点。
  需求:一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器中的window对象、登录浮窗等。
  实现:用一个变量标识当前是否已经为某个类创建过对象,如果是,则在下一次获取这个类的实例时,直接返回之前创建的对象。
  优点:可以用来划分命名空间,减少全局变量的数量可以被实例化,且实例化一次,再次实例化生成的也是第一个实例
  下面举个例子,在js中,我们可以使用闭包来创建实现这种模式:
  总结:在上面的代码中,我们可以使用single.getInstance来获取到单例,并且每次调用均获取到同一个单例。
  在我们平时的开发中,我们也经常会用到这种模式,比如当我们单击登录按钮的时候,页面中会出现一个登录框,而这个浮窗是唯一的,无论单击多少次登录按钮,这个浮窗只会被创建一次,因此这个登录浮窗就适合用单例模式。
  三、代理模式
  代理模式主要是为其他对象提供一种代理以控制对这个对象的访问,主要解决在直接访问对象时带来的问题。
  比如说:要访问的对象在远程的机器上,在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
  代理模式最基本的形式是对访问进行控制,代理对象和另一个对象(本体)实现的是同样的接口。
  实际上工作还是本体在做,它才是负责执行所分派的任务的那个对象或类,代理对象所做的不外乎节制对本体的访问,代理对象并不会在另一对象的基础上添加方法或修改其方法,也不会简化那个对象的接口,它实现的接口与本体完全相同,所有对它进行的方法调用都会被传递给本体。
  总结:在上面的代码中,Proxy可以控制对真正被代理对象的一个访问。在代理模式中,比较常见的就是虚拟代理,虚拟代理用于控制对那种创建开销很大的本体的访问,它会把本体的实例化推迟到有方法被调用的时候。
  比如说,现在我们假设PublicLibrary的实例化很慢,不能在网页加载的时候立即完成,我们可以为其创建一个虚拟代理,让它把PublicLibrary的实例化推迟到必要的时候,比如说我们在前端中经常用到的图片懒加载,就可以用虚拟代理;
  四、观察者模式
  如果大家学过一些像vue,react这些框架,相信大家对观察者模式一定很熟悉,现在很多mvvm框架都用到了观察者模式这个思想,观察者模式又叫做发布—订阅模式。
  它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知和更新,观察者模式提供了一个订阅模型,其中对象订阅事件并在发生时得到通知,这种模式是事件驱动的编程基石,它有利益于良好的面向对象的设计
  定义:对象间的一种一对多的依赖关系。
  需求:当一个对象的状态发生变化时,所有依赖于他的对象都将得到通知。
  优点:时间上的解耦,对象之间的解耦。
  实现:指定好谁充当发布者;给发布者添加一个缓存列表,用于存放回调函数以便通知订阅者;发布消息的时候,发布者会遍历这个缓存列表,依次触发里面存放的订阅者回调函数。
  下面举个例子,比如我们给页面中的一个dom节点绑定一个事件,其实就可以看做是一种观察者模式:
  总结:在上面的例子中,需要监听用户点击 document.body 的动作,但是我们是没办法预知用户将在什么时候点击的,因此我们订阅了 document.body 的 click 事件,当 body 节点被点击时,body 节点便会向订阅者发布 "Hello World" 消息。
  五、策略模式
  策略模式指的是定义一些列的算法,把他们一个个封装起来,目的就是将算法的使用与算法的实现分离开来,避免多重判断条件,更具有扩展性。
  下面也是举个例子,现在超市有活动,vip为5折,老客户3折,普通顾客没折,计算最后需要支付的金额,如果不使用策略模式,我们的代码可能和下面一样:
  在上面的代码中,我们需要很多个判断,如果有很多优惠,我们又需要添加很多判断,这里已经违背了刚才说的设计模式的六大原则中的开闭原则了,如果使用策略模式,我们的代码可以这样写:
  总结:在上面的代码中,通过策略模式,使得客户的折扣与算法解藕,又使得修改跟扩展能独立的进行,不影到客户端或其他算法的使用。
  当我们的代码中有很多个判断分支,每一个条件分支都会引起该"类"的特定行为以不同的方式作出改变,这个时候就可以使用策略模式,可以改进我们代码的质量,也更好的可以进行单元测试。
  若有不对,欢迎指正。如果对你有所帮助还请您转发和点赞。谢谢

宁愿买iPhoneXR,也不愿意加900元买A14OLED,是什么心态?那为什么不再多加点买pro?为什么不再再多加点买promax?自己心里预期多少价位就买多少的,你觉得是什么心态?为什么不多加点钱买奔驰宝马?在多加点买保时捷?你问这种问题是什么心态vivo发布首款搭载主动降噪功能真无线耳机5月20日,主打好音质安静听的vivoTWS2真无线耳机正式发布,售价499元。作为vivo首款搭载主动降噪功能的真无线耳机,vivoTWS2提供高达40dB的降噪深度,并且支持智续航1000KM的时代要来了?蔚来ET7进入量产阶段蔚来日前,蔚来汽车宣布旗下的ET7首台生产线验证样车在5月13日正式下线。生产线验证样车的车身内外饰电子电气底盘等部件将会被组装成整车进行测试优化,新车或将明年第一季度交付。这意味有没有用华为Mate30的朋友,使用体验如何?我用的华为Mate20Pro?经过这15天的使用,下面将使用感受和大家分享一下,本文将从惊艳满意一般这几个方面来展开。1让我惊艳眼前一亮的地方。(1)系统流畅性很好,感觉不到卡顿,打开app的速度也快,在小白测华为手机当中,有没有不建议买的型号?华为有5大系列,分别是p系列,mate系列,nova系列,畅享系列,麦芒系列。很多消费者眼里只有p系列和mate系列,毕竟这两个系列是牵制iPhone的机型。Nova系列虽然性价比你所不知道的人口秘密,到2056年,人口将突破100亿为什么现在的世界人口是70亿?为什么同样生活在地球上,有些生物繁殖快,寿命却短,有些生物虽然繁殖慢,寿命却更长呢?其实不论是人类还是其他生物,都遵循着某一特定的规律,是什么决定了人中国首个茗茶产业带排行公布云南普洱浙江龙井分列一二4月13日,京东超市发布中国茗茶产业带排行榜,据公开可查询到的信息显示,这也是中国首个通过引进电商指数,对茗茶产业带发展情况进行排名的榜单,依据中国茗茶产业带排行榜显示,云南普洱茶美国采用人工智能卫星图像来协助人口普查提高效率弄错人口普查数据会给社区带来巨大损失。美国人口普查局3月10日的一份报告显示,2020年白人和亚洲人的人数过多,而被认定为黑人西班牙裔或拉丁裔或多种族的人的人数不足,这一失败导致人滴滴帮忙养老,T3出行保底收入,网约车撬不动中年人了?在出行这个竞争力强大的市场里,出租车与网约车十年互斗,自动驾驶逞能突围下半场,不得不让千万司机陷入沉思。网约车市场骤冷,滴滴T3出行一喂顺风车等平台倍感压力,内部矛盾频发,外部攻击京东离职员工您的工作居住证找到新公司接收了吗?前些日子的京东离职潮已经过去了一段时日,离职员工如果想继续留在北京发展生活,社保不能断缴,有工作居住证的,是否找到下家单位接收,如果暂时没有,是否需要找代办公司进行挂靠,还需要预留Java中的HashMap详解!详细分析HashMap的工作方式和使用原理HashMap的工作方式HashMap在Map。Entry静态内部类实现中存储keyvalue对HashMap使用哈希算法,在put()和get()方法中,使用了hashCode(
2。2亿花粉升级后,鸿蒙系统暴露出新问题,华为至今没有回应文JING审核子扬校正知秋华为鸿蒙系统自发布以来,一直保持高频率更新,产品适配速度不断加快。根据余承东透露,截止2021年年底,超过2。2亿部设备成功升级鸿蒙系统。单从体量来看,鸿有人问国家电力能不能交给私企开发?国家电网到底有多牛?现在有些人想私有制都想疯了,竟然癞蛤蟆想吃天鹅肉打起了国家电力的主意。电力是国家至关重要的战略能源,关系到国家安全和人民生活,是万万不能交给私人经营的要害企业,对于这一点美国比谁都华为想干什么?海思天光800芯片被确认,这次可能是GPU芯片不知道你发现没,包括欧洲美日等地区,从2021年开始,都在大举提升本地区的半导体产能,以此解决对芯片的需求。于是很多人高呼,我们要尽快造出光刻机,也要将提升芯片产能提上日程,这种想5G还没体验上呢,马上要来6G了?6G跑那么快有必要吗?中国科学家创造的最新6G速度让很多网民感到惊讶紫金山实验室联合东南大学鹏城实验室复旦大学和中国移动等团队,在国家重点研发计划6G专项等项目支持下,搭建了国内领先的光子太赫兹实验环境华为优质旗舰降至新低,120Hz曲面屏100W鸿蒙OS,只要2796元好不容易华为给广大消费者带来了华为Nova9系列,不过因为市场竞争过于激烈,再加上自身是不支持5G网络的,所以热度降低了非常多。还有就是搭载了高通骁龙8的MotoEdgeX30这款后期加装360全景影像有什么影响?现在越来越多的人都有一台属于自己的爱车,作为家庭中最重要的代步工具之一,不仅给生活中带来极大的便利,而且还提高了人们的工作效率。不过,随着车辆的增加,如今道路上的车流量也是非常大,直流电机,存档DC5VULN2003,高电流高电压,灌电流500ma,50V,includereg52。htypedefunsignedintu16typedefunsignedcharu8sbiPhone14真机被内鬼泄漏?看完我吐了iPhone6的模具延续了三代(678)iPhoneX的圆弧边框模具同样延续了三代(XXS11Pro系列)而iPhone13的窄刘海很可能还没被大家看习惯,就要在下一代改成打孔屏设台电推出T50安卓平板展锐T61811英寸全面屏,1299元IT之家1月8日消息,经过一段时间的预热,台电今天发布了T50安卓平板,搭载紫光展锐T618处理器,配备11英寸全面屏,售价1299元。屏幕方面,台电搭载了11英寸全贴合屏幕,20快看极兔发力中东,首先瞄准阿联酋和沙特记者白帆编辑1月7日,JT极兔速递(以下简称极兔)宣布启动位于阿联酋和沙特阿拉伯(简称沙特)两国的快递网络运营,这两个国家也是极兔在中东地区覆盖的首批国家。JT极兔速递中东负责人S新能源汽车比亚迪北汽蓝谷小康股份长城汽车等11家分析2021全年新能源汽车预计产量销量双双超340万辆。其中上汽集团比亚迪全年销量分别为73。3万台60。38万台排前两位。政策面上2022年新能源汽车补贴标准在2021年基础上退坡3