js單例模式的es5實現和es6實現,以及通用惰性單例實現
單例模式
一開始不建立例項物件,當第一次使用時才建立
用一個變數標誌當前是否已經為某個類建立過物件,如果已建立則在下次獲取時返回之前建立的例項物件
es5實現
function Singleton(name){//物件構造方法
this.name=name;
this.instance;
}
Singleton.prototype.getName=()=>{//物件原型方法
console.log(this.name);
}
Singleton.getInstance=(name)=>{//物件靜態方法
//如果有例項則返回,沒有則建立並返回
return this.instance || (this.instance=new Singleton(name))
}
let a=Singleton.getInstance('aa')
let b=Singleton.getInstance('bb')
console.log(a,b,a===b);
//Singleton { name: 'aa' } Singleton { name: 'aa' } true
//a===b說明只第一次訪問的時候建立了例項,後面每次呼叫會獲取第一次建立的同一個例項
es6實現
class Singleton{//類宣告
constructor(name){//類構造器
this.name=name;
this.instance;
}
getName(){//原型方法
console.log(this.name);
}
static getInstance(name){//靜態方法
//如果有例項則返回,沒有則建立並返回
return this.instance || (this.instance=new Singleton(name))
}
}
let c=Singleton.getInstance('cc')
let d=Singleton.getInstance('dd')
console.log(c,d,c===d);
//Singleton { name: 'aa' } Singleton { name: 'aa' } true
惰性單例
一開始不建立例項物件,當第一次使用的時候才建立
通用惰性單例例項
當第一次點選登入按鈕時才渲染登入框,無論點選多少次,都彈出同一個登入框
let getSingle=function(fn){
let result
return function(){
//如果有例項則返回,沒有則建立並返回
return result || (result=fn.apply(this,arguments))
}
}
//單一責任原則,將建立例項和建立DOM的操作解耦
let createLoginLayer=function(){
let div=document.createElement('div')
div.innerHTML="我是登入框"
div.style.display="none"
document.body.appendChild(div)
return div
}
//第一次點選登入的時候才渲染登入框,多次點選登入都返回同一個登入框,不再重新插入DOM
document.getElementById('btnLogin').onclick=function(){
let loginLayer=getSingle(createLoginLayer)
loginLayer.style.display="block"
}
//點選關閉的時候設定登入框不可見,下次點選登入的時候就不需要重新生成插入DOM,只需要設定登入框可見
document.getElementById('btnClose').onclick=function(){
let loginLayer=getSingle(createLoginLayer)
loginLayer.style.display="none"
}
(ps:有說的不對的地方歡迎留言討論)
相關推薦
js單例模式的es5實現和es6實現,以及通用惰性單例實現
單例模式 es5實現 es6實現 單例模式 一開始不建立例項物件,當第一次使用時才建立 用一個變數標誌當前是否已經為某個類建立過物件,如果已建立則在下次獲取時返回之前建立的例項
單例模式(懶漢式和餓漢式)及如何實現執行緒安全
單例模式有兩種:懶漢式和餓漢式。 1 #include <iostream> 2 3 using namespace std; 4 5 6 // 保證在整個程式執行期間,最多隻能有一個物件例項 7 8 9 // 懶漢式 10 // 1 、建構函式私有化 11
設計模式之 單例模式(懶漢式和餓漢式)
設計模式: 一些人總結出來用來解決特定問題的固定的解決方案。 單例模式 解決一個類在記憶體中只存在一個物件,想要保證物件的唯一。 1 為了避免其他程式過多的建立該類物件。禁止其他程式建立該類物件。 2 為了其他程式可以訪問該類物件,在本類中自定義一個物件。 3 方便其他程
spring單例和多例詳解的實驗,以及如何使用多例模式
原文:http://www.tuicool.com/articles/RzIvAj spring生成物件預設是單例的。通過scope屬性可以更改為多例。 <bean id="user" class="modle.User" scope="prototype"&
單例模式(懶漢式和餓漢式)
單例模式是一個類有且僅有一個例項,並且自行例項化向整個系統提供,常用的有懶漢式和餓漢式。 一、懶漢式:在第一次呼叫的時候才例項化自己。 public class Singleton {
如何正確地寫出單例模式(懶漢式和餓漢式寫法)
本文轉自大神:伍翀 原文連結 單例模式算是設計模式中最容易理解,也是最容易手寫程式碼的模式了吧。但是其中的坑卻不少,所以也常作為面試題來考。本文主要對幾種單例寫法的整理,並分析其優缺點。很多都是一些老生常談的問題,但如果你不知道如何建立一個執行緒安全的單例,不知道什
設計模式之單例模式(懶漢式和餓漢式)
設計模式第一個模式通常是單例模式,是為了防止某個類存在多個物件。 程式碼如下: **singlon.h:** #pragma once #ifndef _SINGLON_H #define _SINGLON_H class singlon { publ
單例模式 懶載入和惰性載入
public class Singleton{ private Singleton(){ … } private static class SingletonContainer{
android 開發關於單例模式的用法和總結
說起單例模式,顧名思義也就是一個例項。不管是在單執行緒還是多執行緒下,要保證全域性模式下,只有一個例項。至於為什麼嘞,據我瞭解:1:節省記憶體;2:保證一些資料初始化不會出錯。 查看了網上很多資料以及書籍,發現單例模式比較靠譜的寫法有: 雙重判斷: pub
單例模式(懶漢式和餓漢式區別)
單例模式 所謂單例模式,就是保證類在記憶體中只有一個物件 而如何保證類在記憶體中只有一個物件? 思考一下,我們平時在例項化類的物件時,基本都是通過new 的方式來例項化一個物件,其實說白了,就是呼叫了需要例項化類的預設的構造方法,所以為了保證類只有一個物件,我們需要將類
Singleton(單例模式)的使用和測試效率
測試時一個一個試 /** * @version * @description */ package cn.xasmall.example; /** * @author 26248 * */ public class TestSingleton{
android之單例模式:懶漢式和餓漢式的區別
單例模式:懶漢式和餓漢式 餓漢式:執行緒安全:構造方法私有化:推薦使用 public class Singleton{ private static Si
單例模式的優缺點和使用場景
文章轉自:http://www.tools138.com/create/article/20150929/020009847.html 單利模式的優缺點和使用場景 首先介紹一下單例模式: 單例模式(Singleton),也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例物件的類必須保
設計模式:單例模式-懶漢模型和餓漢模型
什麼是單例模式? 保證一個類只有一個例項,並提供一個訪問它的全域性訪問點。首先,需要保證一個類只有一個例項;在類中,要構造一個例項,就必須呼叫類的建構函式,如此,為了防止在外部呼叫類的建構函式而構造例項,需要將建構函式的訪問許可權標記為protected或pr
Java面試題之在多線程情況下,單例模式中懶漢和餓漢會有什麽問題呢?
餓漢模式 問題 之間 static 代碼 clas ava public 餓漢 懶漢模式和餓漢模式: public class Demo { //private static Single single = new Single();//餓漢模式
單例模式之懶漢式和餓漢式
mce private 靜態工廠方法 pri return let class 懶漢 single //懶漢式public class Singleton { private Singleton() { } private static Singleton
單例模式不是一件小事,快回來看看
use 需要 簡單的 ini blog system faq 依然 集中 上次寫了一篇《單例模式那件小事,看了你不會後悔》的文章,總結了常用的單例模式的實現。本文是上文的延續,單例模式絕不是一件小事,想弄清楚,真不是那麽簡單的。上文提到了常用的三種單例模式的實現方法:餓
單例模式之懶漢的併發問題,只需要新增一個 synchronized 就可以解決了
復現併發問題: package review.bank; /** * Created by kodulf on 2017/2/26. */ public class SingleInstanceLazyMan { private SingleInstance
單例模式--含義是某一個類,在一個程序中只有唯一的一個物件
###單例模式 單例模式是一種常見的設計模式 表示的含義是某一個類,在一個程序中只有唯一的一個物件,並且在語法角度上進行制約 ###為什麼要有單例模式 在系統中,有些類必須保證只能創造出一個物件 我們windows系統中,只能開啟一個資源管理器,因為若是可以開
純js實現的serialize函式,序列化表單資料
jquery的serialize用起來很爽吧,可惜jquery用在移動端的話效率很低,因為專案原因需要用到此函式,所以自己寫了一個,程式碼有些冗餘請見諒 function nodeEach(list){ //將NodeList轉換為Array var arr