1. 程式人生 > >js單例模式的es5實現和es6實現,以及通用惰性單例實現

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