摘要:什么是設(shè)計(jì)模式設(shè)計(jì)模式是一種能夠被反復(fù)使用,符合面向?qū)ο筇匦缘拇a設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),合理的使用設(shè)計(jì)模式能夠讓你得代碼更容易維護(hù)和可靠設(shè)計(jì)模式的類型共分為創(chuàng)建型模式,結(jié)構(gòu)型模式,行為型模式三種創(chuàng)建型模式創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過(guò)程進(jìn)行了抽象
什么是設(shè)計(jì)模式
設(shè)計(jì)模式是一種能夠被反復(fù)使用,符合面向?qū)ο筇匦缘拇a設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),合理的使用設(shè)計(jì)模式能夠讓你得代碼更容易維護(hù)和可靠創(chuàng)建型模式設(shè)計(jì)模式的類型共分為創(chuàng)建型模式,結(jié)構(gòu)型模式,行為型模式三種
創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過(guò)程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離,創(chuàng)建模式有
單例模式
抽象工廠模式
建造者模式
工廠模式
原型模式
單例模式單例模式的定義是保證一個(gè)類僅有一個(gè)實(shí)例,單例模式它必須自行創(chuàng)建這個(gè)實(shí)例,并提供一個(gè)訪問(wèn)他的全局的訪問(wèn)點(diǎn)es5的實(shí)現(xiàn)
var only = function(data) { this.data = data; this.Instance = null; } only.go = function(data) { if(!this.Instance) { this.Instance = new only(data); } return this.Instance; } let obj1 = only.go("1") let obj2 = only.go("2") console.log(obj1 === obj2); console.log(obj1); console.log(obj2);es6
class only { constructor(data) { if (only.prototype.Instance === undefined) { this.data = data; only.prototype.Instance = this; } return only.prototype.Instance; } } let ob1 = new only("a"); let ob2 = new only("b"); ob2.init = "init"; console.log(ob1 === ob2); console.log(ob1); console.log(ob2);
上邊的代碼中,無(wú)論怎么new,其結(jié)果都是唯一的那個(gè)實(shí)例
單例模式的優(yōu)缺點(diǎn)單例模式,因?yàn)樗膶?shí)例是唯一的,所以完全可以通過(guò)創(chuàng)建的時(shí)候,嚴(yán)格的去控制怎么去創(chuàng)建和訪問(wèn)或者說(shuō)拋出錯(cuò)誤,如果存在頻繁的創(chuàng)建和銷毀的操作的時(shí)候,單例模式事可以提高性能的
但是同樣的,單純的單例模式中是沒(méi)有抽象操作的,所以說(shuō)單例模式是一個(gè)不便于擴(kuò)展的模式
單例模式的使用場(chǎng)景舉個(gè)例子比如說(shuō)在項(xiàng)目中的某些時(shí)候,我們需要一個(gè)dom元素,但是這個(gè)元素并不存在,我們需要?jiǎng)?chuàng)建他,但是在創(chuàng)建完之后,如果我們?cè)偃c(diǎn)這個(gè)按鈕的時(shí)候,如果他再一次的創(chuàng)建dom,顯然是不合理的,dom會(huì)越來(lái)越多一直被創(chuàng)建,那么在這個(gè)時(shí)候,我們可以使用單例模式來(lái)實(shí)現(xiàn)我們想要的效果
例子實(shí)現(xiàn)上邊的改吧改吧
class only { constructor(data) { if (only.prototype.Instance === undefined) { var div = document.createElement("div"); div.innerHTML = data; only.prototype.Instance = div; } return only.prototype.Instance; } } let ob1 = new only("a"); let ob2 = new only("b"); ob2.init = "init"; console.log(ob1 === ob2); console.log(ob1); console.log(ob2);
如圖
dom元素并不會(huì)被重復(fù)創(chuàng)建,可以在上邊的例子中加一個(gè)狀態(tài),根據(jù)狀態(tài)判斷是否要顯示,避免了資源的浪費(fèi)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/105563.html
摘要:什么是單例模式單例模式是單例模式,也叫單子模式,是一種常用的軟件設(shè)計(jì)模式。在應(yīng)用這個(gè)模式時(shí),單例對(duì)象的類必須保證只有一個(gè)實(shí)例存在。 什么是單例模式 單例模式是單例模式,也叫單子模式,是一種常用的軟件設(shè)計(jì)模式。 在應(yīng)用這個(gè)模式時(shí),單例對(duì)象的類必須保證只有一個(gè)實(shí)例存在。 許多時(shí)候整個(gè)系統(tǒng)只需要擁有一個(gè)的全局對(duì)象,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為。。(來(lái)源于維基百科) 1.創(chuàng)建單例模式,案...
摘要:文章系列設(shè)計(jì)模式單例模式設(shè)計(jì)模式策略模式設(shè)計(jì)模式代理模式概念單例模式的定義是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。在開(kāi)發(fā)中,單例模式的用途同樣非常廣泛。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》整理而來(lái),其中會(huì)加入了一些自己的思考。希望對(duì)大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略模式 js設(shè)計(jì)模式--代理模式 概念...
摘要:?jiǎn)卫J秸f(shuō)到單例設(shè)計(jì)模式,中經(jīng)常使用的單例模式通常分兩種,懶漢模式和餓漢模式懶漢模式簡(jiǎn)單寫了下私有化構(gòu)造函數(shù)在獲取實(shí)例的方法中返回實(shí)例化對(duì)象雖然很多大佬都寫過(guò)啦,但是小生為了加深記憶便再寫一遍雖然實(shí)現(xiàn)了單例模式,但是未考慮到線程安全,多個(gè)線 java單例模式 說(shuō)到單例設(shè)計(jì)模式,Java中經(jīng)常使用java的單例模式通常分兩種,懶漢模式和餓漢模式 懶漢模式 class singleDemo...
摘要:什么是單例模式單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。對(duì)象就是單例模式的體現(xiàn)。總結(jié)單例模式雖然簡(jiǎn)單,但是在項(xiàng)目中的應(yīng)用場(chǎng)景卻是相當(dāng)多的,單例模式的核心是確保只有一個(gè)實(shí)例,并提供全局訪問(wèn)。 1. 什么是單例模式? 單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。它是指在一個(gè)類只能有一個(gè)實(shí)例,即使多次實(shí)例化該類,也只返回第一次實(shí)例化后的實(shí)例對(duì)象。單例模式不僅能減少不必要...
閱讀 984·2021-11-23 09:51
閱讀 3470·2021-11-22 12:04
閱讀 2716·2021-11-11 16:55
閱讀 2921·2019-08-30 15:55
閱讀 3222·2019-08-29 14:22
閱讀 3351·2019-08-28 18:06
閱讀 1240·2019-08-26 18:36
閱讀 2126·2019-08-26 12:08