久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

vue運用了哪些模式

vue運用的設計模式:1、單例模式,確保一個類只有一個實例對象,并提供一個全局訪問點供其訪問。2、工廠模式,是用來創(chuàng)建對象的一種模式,不必暴露構造函數(shù)的具體邏輯,而是將邏輯封裝在一個個函數(shù)之中。3、裝飾器模式,允許向現(xiàn)有的函數(shù)添加新的功能,同時不改變其結構。4、策略模式,就是定義一系列的算法,把他們一個個封裝起來,并且使他們可以相互替換。5、發(fā)布訂閱者模式。

vue運用了哪些模式

本教程操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。

什么是設計模式:

設計模式的原則是找出程序中的變化,并將變化封裝起來,實現(xiàn)高效的可復用性。核心在于意圖,而不在結構。通過設計模式可以幫助我們增強代碼的可重用性、可擴充性、 可維護性、靈活性。我們使用設計模式的最終目的是為了實現(xiàn)代碼的高類聚低耦合。你是否思考過這樣的一個問題,如何讓代碼寫的更有健壯性,其實核心在于把握變與不變。確保變的部分更加靈活,不變的地方更加穩(wěn)定,而使用設計模式可以讓我們達到這樣的目的。

下面來總結一下vue項目中或者說工作中常用的設計模式。

單例模式

單例模式:確保一個類只有一個實例對象,并提供一個全局訪問點供其訪問。

優(yōu)點:適用于單一對象,只生成一個對象實例,避免頻繁創(chuàng)建和銷毀實例,減少內存占用。

缺點:不適用動態(tài)擴展對象。

場景:登錄浮窗、Vue中的axios實例(我們對axios進行請求攔截和響應攔截,多次調用封裝好的axios但是僅設置一次,封裝好的axios導出就是一個單例)、全局態(tài)管理 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()
登錄后復制

工廠模式

工廠模式:工廠模式是用來創(chuàng)建對象最常見的一種設計模式。不必暴露構造函數(shù)的具體邏輯,而是將邏輯封裝在一個個函數(shù)之中,那么這個構造函數(shù)就可以被看做工廠。

場景: 有構造函數(shù)的地方,寫了大量的構造函數(shù)代碼,調用了大量的new操作符。

優(yōu)點:通過工廠模式,我們可以快速創(chuàng)建大量相似對象,沒有重復代碼。

缺點:工廠模式創(chuàng)建的對象屬于Object,無法區(qū)分對象類型,這也是工廠模式沒有廣泛使用的原因。

 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): 在不改變對象自身的基礎上,在程序運行期間給對象動態(tài)的添加職責;若直接修改函數(shù)體,則違背了’開放封閉原則’,也違背了我們的’單一職責原則’;簡單的說就是允許向現(xiàn)有的函數(shù)添加新的功能,同時不改變其結構。

場景: 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是兩個高階函數(shù),讓我們一起回憶一下什么是高階函數(shù)?   // 還知道call,apply,bind的區(qū)別嗎   let getName = function getName () {     // 加入這是你同事寫的爛代碼,看不下去的那種,那么別動他的代碼     console.log('這是getName函數(shù)')   }    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表單驗證時也可以運用

// 這里可以將所有的表單驗證正則函數(shù)寫在這里 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'] }]  }
登錄后復制

發(fā)布訂閱者模式

發(fā)布訂閱者模式又叫觀察者模式發(fā)布訂閱者模式一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得將得到通知;觀察者模式則是一種一對一的依賴關系。

  • 手寫觀察者模式

class Observer {   client = {}   // 訂閱   listen (key, fn) {     if (!this.client[key]) {       this.client[key] = []     }        this.client[key].push(fn)   }   // 發(fā)布   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 = '正在測試'
登錄后復制

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日韩大片在线观看| 国产麻豆精品久久| 91一区二区| 精品久久免费| 日韩免费av| 久久精品官网| 免费观看不卡av| 91久久午夜| 亚洲小说春色综合另类电影| 日韩一区二区三区在线看| 亚洲三级网站| 中文字幕av亚洲精品一部二部 | 亚洲精品美女91| 私拍精品福利视频在线一区| 亚洲高清成人| 免费在线观看精品| 国产乱人伦丫前精品视频| 国产毛片久久久| 国产粉嫩在线观看| 久久精品播放| 最新国产精品| 国产精品成人国产| 狠狠久久伊人中文字幕| 日产精品一区| 男人的天堂久久精品| 亚洲综合图色| 欧美激情一区| 91精品国产91久久久久久黑人| 1024精品久久久久久久久| 鲁大师成人一区二区三区| 日韩高清在线一区| 丁香婷婷久久| 中文在线不卡| 国产精品一级在线观看| 久久影院午夜精品| 亚洲色诱最新| 欧美xxxx性| 女人av一区| 欧美精品国产一区| 色婷婷久久久| 日韩中文字幕麻豆| 久久三级中文| 国产毛片一区| 精品免费视频| 免费看的黄色欧美网站| 国产精品**亚洲精品| 久久久国产精品一区二区中文| 亚洲涩涩av| 三上亚洲一区二区| 亚洲精品乱码久久久久久蜜桃麻豆| 精品国产中文字幕第一页| 午夜久久影院| 久久精品免费看| 蜜臀精品久久久久久蜜臀 | 伊人久久亚洲热| 国产精品视频3p| 99国产精品久久久久久久成人热 | 亚洲精品伊人| 精品国产乱码| 蜜桃久久久久久| 国产精品高颜值在线观看| 亚洲18在线| 久久精品国产亚洲夜色av网站| 18国产精品| 欧美精品激情| 国产精品mv在线观看| 亚洲综合丁香| 国产v日韩v欧美v| 亚洲欧洲免费| 久久在线免费| 美女av一区| 亚洲久久在线| 婷婷色综合网| 激情不卡一区二区三区视频在线| 日av在线不卡| 蜜桃成人精品| 国产精品网址| 亚州精品视频| 日韩午夜一区| 日韩国产一区| 热久久久久久| 亚洲深夜福利| 天堂日韩电影| 日韩不卡一区| 久久尤物视频| 日韩激情综合| 蜜臀av一区二区在线免费观看| 日韩精品2区| 国产精品白浆| 日韩精品a在线观看91| 日韩视频中文| 亚洲91视频| 免费福利视频一区二区三区| 美女毛片一区二区三区四区最新中文字幕亚洲| 亚洲影视一区二区三区| 久久国产电影| 欧美精品高清| 在线看片福利| 精品国产18久久久久久二百| 国产精品久久久亚洲一区| 亚洲91网站| 日韩一区精品字幕| 99精品视频在线| 日韩精品专区| 国产精品精品| 久久精品国产一区二区| 国产欧美日韩精品高清二区综合区| 免费的成人av| 亚洲乱码久久| 日韩一区二区三区精品视频第3页| 伊人久久成人| 在线亚洲自拍| 美女精品网站| 亚洲一区二区三区无吗| 在线观看视频免费一区二区三区| 99国产精品久久久久久久| 狠狠干综合网| 日韩亚洲精品在线| 久久不射网站| 亚洲精品伦理| 日韩不卡免费视频| 国产精品视频一区二区三区综合| 日本aⅴ亚洲精品中文乱码| 日本亚洲最大的色成网站www | 另类综合日韩欧美亚洲| 国产女人18毛片水真多18精品| 日韩av成人高清| 国产视频一区二| 国产精品啊啊啊| 精品欧美日韩精品| 色综合五月天| 欧美日韩免费观看视频| 欧美黄色网页| 激情偷拍久久| 美女91精品| 日韩毛片一区| 久久wwww| 日韩成人a**站| 久久久久久久久丰满| 亚洲精品国产偷自在线观看| 三级欧美在线一区| 亚久久调教视频| 国产高清视频一区二区| av在线资源| 国产农村妇女精品一区二区| 四虎精品一区二区免费| 国产精品麻豆成人av电影艾秋| 国产一区丝袜| 亚洲成人一区| 日本一区二区三区视频在线看| 国产精品中文字幕亚洲欧美| 精品免费av一区二区三区| 91欧美日韩| 亚洲天堂久久| 一区二区国产精品| 国产精品红桃| 婷婷激情一区| 一本一道久久a久久| 国产精品一卡| 日韩中文视频| 天堂av在线一区| 69堂精品视频在线播放| 国内一区二区三区| 亚洲激情中文| 97成人在线| 中文字幕成在线观看| 99re国产精品| 久久激情av| 亚洲成人一区在线观看| 视频一区二区欧美| 久久精品欧洲| 蘑菇福利视频一区播放| 国产精品qvod| 欧美日韩国产免费观看| 欧美精品国产一区| 秋霞影院一区二区三区 | 91精品观看| 91亚洲精品视频在线观看| 97人人精品| 伊人精品久久| 欧美丰满日韩| 男女性色大片免费观看一区二区 | 蜜桃国内精品久久久久软件9| 日韩精品乱码av一区二区| 亚洲天堂资源| 婷婷综合福利| 欧美亚洲在线日韩| 国产精品久久久久77777丨 | 一区二区不卡| 在线看片福利| 日韩国产一区二| 亚洲国内精品| 国产精品最新| 国产农村妇女精品一区二区| 精品视频网站| 日韩一二三区在线观看| 99久久精品费精品国产| 国产精品久久久久久av公交车| 欧美日韩国产高清| 粉嫩av一区二区三区四区五区|