当前位置:首页 > 科技  > 软件

JavaScript设计模式——创建型设计模式

来源: 责编: 时间:2023-11-03 09:17:30 228观看
导读简单工厂模式抽象各个对象的共同点,加工出最初形态,对于不同点进行独立设计。function createBook(name, time, type) { //创建一个对象,并对对象拓展属性和方法 const o = new Object(); //共同参数 o.name = name;

简单工厂模式

抽象各个对象的共同点,加工出最初形态,对于不同点进行独立设计。4n328资讯网——每日最新资讯28at.com

function createBook(name, time, type) {  //创建一个对象,并对对象拓展属性和方法  const o = new Object();  //共同参数  o.name = name;  o.time = time;  o.getName = function () {    console.log(this.name);  }  //差异性  if (type === "js") {    //js类书差异处理  } else if (type === "css") {    //css类书差异处理  } else if (type === "html") {    //html类书差异处理  }  return o;}const book1 = createBook('js book', 2014, 'js');const book2 = createBook('css book', 2013, 'css');const book3 = createBook('html book', 2012, 'css');book1.getName();book2.getName();book3.getName();

安全工厂模式

安全工厂模式可以屏蔽对类的错误使用,如忘记写new实例化对象避免产生一些非预期的行为。4n328资讯网——每日最新资讯28at.com

function Factory(type, content) {  //如果忘记写new实例化了,加工重新执行一次  if (this instanceof Factory) {    this[type](content);  } else {    new Factory(type, content);  }}Factory.prototype = {  JavaScript: (content) => {    console.log(content)  },  Java: (content) => {    console.log(content)  },}Factory('JavaScript', 'JavaScript哪家强');Factory('Java', 'Java哪家强');

建设者模式

顾名思义,结合多个类,创造出结合出来的终极人物(对象)4n328资讯网——每日最新资讯28at.com

//创建人类function Human(param) {  //技能  this.skill = param && param.skill || "保密";  //兴趣爱好  this.hobby = param && param.hobby || "保密";}Human.prototype.getSkill = function () {  return this.skill;}Human.prototype.getHobby = function () {  return this.hobby;}//创建姓名类function Name(name) {  (function (_this, name) {    _this.wholeName = name;    _this.firstName = name.slice(0, name.indexOf(" "));    _this.secordName = name.slice(name.indexOf(" "));  })(this, name)}//创建职位类function Work(work) {  (function (_this, work) {    switch (work) {      case "code":        _this.work = "工程师";        _this.workDescript = "每天沉醉于编程";        break;      case "UI":      case "UE":        _this.work = "设计师";        _this.workDescript = "设计更是一种艺术";        break;      case "teach":        _this.work = "教师";        _this.workDescript = "分享页是一种快乐";        break;      default:        _this.work = work;        _this.workDescript = "对不起,我们还不清楚您所选择职位的相关描述";    }  })(this, work)}//创建建设者类function Person(name, work) {  var person = new Human();  person.name = new Name(name);  person.work = new Work(work);  return person;}const person = new Person("xiao ming", "code");console.log(person.skill);                  //保密console.log(person.work.workDescript);      //每天沉醉于编程console.log(person.name.firstName);         //xiao

这里结合了Humer、Name、Work,最后在Person中构造出了一个应聘者。4n328资讯网——每日最新资讯28at.com

原型模式

用原型实例指向创建对象的类,适用于创建新的对象的类共享原型对象的属性以及方法。 简而言之,就是根据一个基类(原型类)构造出多个子类,将公用方法和属性保存在原型类中。4n328资讯网——每日最新资讯28at.com

//图片轮播基类function LoopImages(imgArr, container) {  this.imgArr = imgArr;  this.container = container;}LoopImages.prototype = {  //创建轮播图片  createImage: function (img) {    this.imgArr.push(img);    console.log('LoopImages createImage function');  },  //切换下一张图片  changeImage: () => {    console.log('LoopImages changeImage function');  }}//上下滑动切换类function SlideLoopImg(imgArr, container) {  LoopImages.call(this, imgArr, container);}SlideLoopImg.prototype = new LoopImages();//重写继承的切换下一张图片方法SlideLoopImg.prototype.changeImage = () => {  console.log('SlideLoopImg changeImage function');}//渐隐切换类function FadeLoopImg(imgArr, container, arrow) {  LoopImages.call(this, imgArr, container);  this.arrow = arrow;}FadeLoopImg.prototype = new LoopImages();//重写继承的切换下一张图片方法FadeLoopImg.prototype.changeImage = () => {  console.log('FadeLoopImg changeImage function');}const fade = new FadeLoopImg([  '01.jpg',  '02.jpg',  '03.jpg',  '04.jpg'], 'div', [  'left.jpg',  'right.jpg'])console.log(fade.arrow);        //['left.jpg','right.jpg']console.log(fade.imgArr);       //['01.jpg', '02.jpg', '03.jpg', '04.jpg']fade.createImage('05.jpg');     //LoopImages createImage functionconsole.log(fade.imgArr);        //['01.jpg', '02.jpg', '03.jpg', '04.jpg', '05.jpg']fade.changeImage();             //FadeLoopImg changeImage function

可以看到,原型模式可以让多个对象分享同一个原型对象的属性与方法,这也是一种继承方式。 原型对象更加适合在创建复杂的对象时,对于那些需求一直在变化而导致对象结构不停改变时,将那些比较稳定的属性与方法公共提取,实现继承,代码复用。4n328资讯网——每日最新资讯28at.com

单例模式

单例模式,顾名思义,一个类只能有一个实例,重复实例化只会返回第一次实例的对象。4n328资讯网——每日最新资讯28at.com

静态变量

通过一个立即执行函数,将所有方法挂载,并且为静态变量,无法改变。4n328资讯网——每日最新资讯28at.com

const React = (function () {  var react = {    useState: () => { },    useEffect: () => { },    useRef: () => { },    useMemo: () => { },    useCallback: () => { },    useReducer: () => { },    useContext: () => { }  }  return {    get: function (name) {      return react[name] || null;    }  }})()console.log(React.get('useState'))

实例化单例

创建一个立即执行函数,利用闭包,使记录值常驻在内存中,每次实例化的时候判断是否为第一次实例化,实现单例。4n328资讯网——每日最新资讯28at.com

const React = (function () {  let instance = null;  return function (params) {    if (instance) {      return instance    }    this.params = params;    return instance = this;  }})()console.log(new React({  useState: () => { },  useEffect: () => { },  useRef: () => { },  useMemo: () => { },  useCallback: () => { },  useReducer: () => { },  useContext: () => { }}) === new React('hh'));      //true

惰性单例

非实例化创建方式,也是一种延迟创建的方式。4n328资讯网——每日最新资讯28at.com

function React(fns) {  this.fns = fns;}React.instance = null;React.getFn = function () {  console.log(this.fns)}React.getInstance = function (name) {  if (!this.instance) {    return this.instance = new React(name)  }  return this.instance}console.log(React.getInstance({  useState: () => { },  useEffect: () => { },  useRef: () => { },  useMemo: () => { },  useCallback: () => { },  useReducer: () => { },  useContext: () => { }}) === React.getInstance('xx'));    //true

总结

本文介绍了JavaScript中创建型设计模式,希望看过之后对读者开发中代码质量有所帮助,有所感悟。4n328资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16758-0.htmlJavaScript设计模式——创建型设计模式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Apache Flink的四个理由,你知道几个?

下一篇: Rust编程基础之函数和表达式

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 三言两语说透设计模式的艺术-简单工厂模式

    三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 三言两语说透柯里化和反柯里化

    三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 在线图片编辑器,支持PSD解析、AI抠图等

    在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 一文搞定Java NIO,以及各种奇葩流

    一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • iQOO 11S新品发布会

    iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
  • 最薄的14英寸游戏笔记本电脑  Alienware X14已可以购买

    最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top