我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue运用了哪些模式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue运用了哪些模式

vue运用了哪些模式

本教程操作环境:windows7系统、vue3版,DELL G3电脑。

什么是设计模式:

设计模式的原则是找出程序中的变化,并将变化封装起来,实现高效的可复用性。核心在于意图,而不在结构。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性。我们使用设计模式的最终目的是为了实现代码的高类聚低耦合。你是否思考过这样的一个问题,如何让代码写的更有健壮性,其实核心在于把握变与不变。确保变的部分更加灵活,不变的地方更加稳定,而使用设计模式可以让我们达到这样的目的。

下面来总结一下vue项目中或者说工作中常用的设计模式。

单例模式

单例模式:确保一个类只有一个实例对象,并提供一个全局访问点供其访问。

优点:适用于单一对象,只生成一个对象实例,避免频繁创建和销毁实例,减少内存占用。

缺点:不适用动态扩展对象。

场景:登录浮窗、Vue中的axios实例(我们对axios进行请求拦截和响应拦截,多次调用封装好的axios但是仅设置一次,封装好的axios导出就是一个单例)、全局态管理 store、线程池、全局缓存

  function Person (name, age) {
    this.name = name
    this.age = age
    this.info = function () {
      console.log(`我的名字叫${this.name}, 我今年${this.age}了`)
    }
  }
  Person.getInstance = function (name, age) {
    if (!this.instance) {
      this.instance = new Person(name, age)
    }
    console.log(this.instance)
    return this.instance
  }
  let b1 = Person.getInstance('单例1', 18)
  let b2 = Person.getInstance('单例2', 18)
  b1.info()
  b2.info()

工厂模式

工厂模式:工厂模式是用来创建对象最常见的一种设计模式。不必暴露构造函数的具体逻辑,而是将逻辑封装在一个个函数之中,那么这个构造函数就可以被看做工厂。

场景: 有构造函数的地方,写了大量的构造函数代码,调用了大量的new操作符。

优点:通过工厂模式,我们可以快速创建大量相似对象,没有重复代码。

缺点:工厂模式创建的对象属于Object,无法区分对象类型,这也是工厂模式没有广泛使用的原因。

 function Factory (name, age) {
   this.name = name;
   this.age = age;
   // 或者
   // let obj = {}
   // obj.name = name
   // obj.age = age
   // return obj
 }
 Factory.prototype.say = function () {
   console.log(`我的名字叫${this.name}, 我今年${this.age}了`)
 }
 let zs = new Factory('张三', 18);
 let ls = new Factory('李四', 20);
 zs.say()
 ls.say()

装饰器模式

装饰器模式(切面编程AOP): 在不改变对象自身的基础上,在程序运行期间给对象动态的添加职责;若直接修改函数体,则违背了’开放封闭原则’,也违背了我们的’单一职责原则’;简单的说就是允许向现有的函数添加新的功能,同时不改变其结构。

场景: vue中的表单验证与表单提交就运用了这种模式,遵循封闭开放原则。

 function before (fn, callback) {
    let _this = this;
    return function () {
      callback.apply(this, arguments)
      return fn.bind(this, arguments)
    }
  }

  function after (fn, callback) {
    let _this = this 
    return function () {
      let res = fn.apply(this, arguments)
      callback.apply(this, arguments)
      return res
    }
  }
  // before和after是两个高阶函数,让我们一起回忆一下什么是高阶函数?
  // 还知道call,apply,bind的区别吗
  let getName = function getName () {
    // 加入这是你同事写的烂代码,看不下去的那种,那么别动他的代码
    console.log('这是getName函数')
  }

  before(getName, function () {
    // 这个就是你要写的新逻辑
    console.log('切入前代码')
  })()

  after(getName, function () {
    // 这个也是你要写的新逻辑
    console.log('切入后代码')
  })()

策略模式

策略模式: 就是定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。

 let strategy = {
    'A': function (bonus) {
      return bonus * 4
    },
    'B': function (bonus) {
      return bonus * 3
    }
  }

  function fn (level, bonus) {
    return strategy[level](bonus)
  }

  let result = fn('A', 4000)
  console.log(result, 'result')
  // 策略模式提供了开放-封闭原则,将算法或者方法封装在一个类中,使它们易于切换,易于替换。

  function func (a, b) {
    let f = function f() {
      return a + b
    }
    return f
  }

在vue表单验证时也可以运用

// 这里可以将所有的表单验证正则函数写在这里
export const loginUsername = (str) => {
  return /^[a-zA-Z0-9_]{3,20}$/.test(str);
};
import * as validateForm from './validate';
export const gene = (key, msg) => {
  return (r, v, c) => {
    if (validateForm[key](v)) {
      c();
    } else {
      c(new Error(msg));
    }
  };
};
// 这样看着是不是很清晰明了
import {gene} from '@/utils/formValidateGene';
rules: {
     account: [{ required: true, validator: gene('loginUsername', '请输入合适的账号'), trigger: ['blur', 'change'] }]
 }

发布订阅者模式

发布订阅者模式又叫观察者模式发布订阅者模式一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得将得到通知;观察者模式则是一种一对一的依赖关系。

  • 手写观察者模式
class Observer {
  client = {}
  // 订阅
  listen (key, fn) {
    if (!this.client[key]) {
      this.client[key] = []
    } 
      this.client[key].push(fn)
  }
  // 发布
  publish (key) {
    this.client[key].forEach(fn => {
      fn.apply(this, arguments)
    })
  }
}

let observer = new Observer()
observer.listen('华为', (model, brand) => {
  console.log(model, brand)
})
observer.listen('苹果', function (model, brand) {
  console.log(model, brand)
})
observer.publish('华为', 'P50')
observer.publish('苹果', '14')
  • 手写响应式
class EventEmitter {
    constructor () {
      this.client = {}
    }
    on (key, fn) {
      if (!this.client[key]) {
        this.client[key] = []
      }
      this.client[key].push(fn)
    }
    trigger (key, ...args) {
      this.client[key].forEach(cb => cb(...args))
    }
  }
  let event = new EventEmitter()
  event.on('hello', function(res) {
    console.log('hello', res)
  })
  
  let data = {
    name: '测试'
  }
  Object.defineProperty(data, 'name', {
    get (val) {
      // console.log(val)
    },
    set (newVal) {
      console.log(newVal)
      event.trigger('hello', newVal)
    }
  })
  data.name = '正在测试'

【相关推荐:vuejs视频教程、web前端开发】

以上就是vue运用了哪些模式的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue运用了哪些模式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue运用了哪些模式

vue运用的设计模式:1、单例模式,确保一个类只有一个实例对象,并提供一个全局访问点供其访问。2、工厂模式,是用来创建对象的一种模式,不必暴露构造函数的具体逻辑,而是将逻辑封装在一个个函数之中。3、装饰器模式,允许向现有的函数添加新的功能,同时不改变其结构。4、策略模式,就是定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。5、发布订阅者模式。
2023-05-14

vue运用的模式有哪些

这篇文章主要介绍“vue运用的模式有哪些”,在日常操作中,相信很多人在vue运用的模式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue运用的模式有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-04

PHP有哪些运行模式

这篇文章将为大家详细讲解有关PHP有哪些运行模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。运行模式:1、CGI协议模式,服务器通过特定协议与程序通信;2、“fast-cgi”协议模式,开启后可一直处理
2023-06-14

vue路由模式有哪些

vue路由模式有:1、hash模式,使用URL的hash值来作为路由,支持所有浏览器;其url路径会出现“#”字符。2、history模式,依赖于HTML5 API(旧浏览器不支持)和HTTP服务端配置,没有后台配置的话,页面刷新时会出现404。3、abstract模式,适用于所有JavaScript环境,如果没有浏览器API,路由器将自动被强制进入此模式。
2023-05-14

Tomcat的运行模式有哪些

Tomcat的运行模式有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。tomcat的运行模式有3种一、bio(blocking I/O)即阻塞式I/O操作,表示Tomcat
2023-05-31

php中有哪些运行模式

本篇文章给大家分享的是有关php中有哪些运行模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开
2023-06-14

hadoop可以运行的模式有哪些

Hadoop可以运行的模式包括以下几种:单机模式(Standalone Mode):在单台机器上运行Hadoop,适合开发和测试。伪分布式模式(Pseudo-Distributed Mode):在一台机器上模拟多台机器运行Hadoop,用于
hadoop可以运行的模式有哪些
2024-03-13

java单例模式解决了哪些问题

Java单例模式解决了以下问题:限制了类的实例化,保证一个类只有一个实例。这样可以节省系统资源,提高性能。提供了对类实例的全局访问点。这样可以方便地在系统中的任何地方访问该实例。保证了对象的唯一性。由于单例模式只允许一个实例存在,所以可以确
2023-10-20

hadoop集群可以运行的模式有哪些

Hadoop集群可以以多种不同的模式来运行,具体取决于您的需求和环境。以下是Hadoop集群可以运行的一些常见模式:Standalone模式:也称为本地模式,适用于开发和测试目的。所有组件都在单个节点上运行,不涉及分布式计算。伪分布式模式
hadoop集群可以运行的模式有哪些
2024-03-06

python画圆运用了哪些函数

小编给大家分享一下python画圆运用了哪些函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python画圆运用了matplotlb库的figure()和Cir
2023-06-08

vue路由模式有哪些及怎么实现

本篇内容介绍了“vue路由模式有哪些及怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue路由模式有:1、hash模式,使用URL的
2023-07-04

vue的几种路由模式有哪些区别

这篇文章主要介绍了vue的几种路由模式有哪些区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue的几种路由模式有哪些区别文章都会有所收获,下面我们一起来看看吧。vue路由有三种模式:Hash、History
2023-07-05

php中cli和cgi运行模式有哪些区别

这篇文章主要讲解了“php中cli和cgi运行模式有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中cli和cgi运行模式有哪些区别”吧!区别:CLI指的是命令行的运行模式,即
2023-07-05

vue后台常用模板有哪些

这篇文章将为大家详细讲解有关vue后台常用模板有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue后台常用模板:element文档: http://element-cn.eleme.io/#/zh-
2023-06-14

编程热搜

目录