国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript設計模式之單體模式學習筆記

2024-05-06 15:11:28
字體:
來源:轉載
供稿:網友

單體模式提供了一種將代碼組織為一個邏輯單元的手段,這個邏輯單元中的代碼可以通過單一變量進行訪問。

單體模式的優點是:

可以用來劃分命名空間,減少全局變量的數量。 使用單體模式可以使代碼組織的更為一致,使代碼容易閱讀和維護。 可以被實例化,且實例化一次。

什么是單體模式?單體模式是一個用來劃分命名空間并將一批屬性和方法組織在一起的對象,如果它可以被實例化,那么它只能被實例化一次。

但是并非所有的對象字面量都是單體,比如說模擬數組或容納數據的話,那么它就不是單體,但是如果是組織一批相關的屬性和方法在一起的話,那么它有可能是單體模式,所以這需要看開發者編寫代碼的意圖;

下面我們來看看定義一個對象字面量(結構類似于單體模式)的基本結構如下:

// 對象字面量var Singleton = {  attr1: 1,  attr2: 2,  method1: function(){    return this.attr1;  },  method2: function(){    return this.attr2;  }};

如上面只是簡單的字面量結構,上面的所有成員變量都是通過Singleton來訪問的,但是它并不是單體模式;因為單體模式還有一個更重要的特點,就是可以僅被實例化一次,上面的只是不能被實例化的一個類,因此不是單體模式;對象字面量是用來創建單體模式的方法之一;

使用單體模式的結構如下demo

我們明白的是單體模式如果有實例化的話,那么只實例化一次,要實現一個單體模式的話,我們無非就是使用一個變量來標識該類是否被實例化,如果未被實例化的話,那么我們可以實例化一次,否則的話,直接返回已經被實例化的對象。

如下代碼是單體模式的基本結構:

// 單體模式var Singleton = function(name){  this.name = name;  this.instance = null;};Singleton.prototype.getName = function(){  return this.name;}// 獲取實例對象function getInstance(name) {  if(!this.instance) {    this.instance = new Singleton(name);  }  return this.instance;}// 測試單體模式的實例var a = getInstance("aa");var b = getInstance("bb");
// 因為單體模式是只實例化一次,所以下面的實例是相等的console.log(a === b); // true

由于單體模式只實例化一次,因此第一次調用,返回的是a實例對象,當我們繼續調用的時候,b的實例就是a的實例,因此下面都是打印的是aa;

console.log(a.getName());// aaconsole.log(b.getName());// aa

上面的封裝單體模式也可以改成如下結構寫法:

// 單體模式var Singleton = function(name){  this.name = name;};Singleton.prototype.getName = function(){  return this.name;}// 獲取實例對象var getInstance = (function() {  var instance = null;  return function(name) {    if(!instance) {      instance = new Singleton(name);    }    return instance;  }})();// 測試單體模式的實例var a = getInstance("aa");var b = getInstance("bb");// 因為單體模式是只實例化一次,所以下面的實例是相等的console.log(a === b); // trueconsole.log(a.getName());// aaconsole.log(b.getName());// aa            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 锡林郭勒盟| 云浮市| 古蔺县| 满洲里市| 留坝县| 丹凤县| 汝州市| 汝阳县| 临西县| 新乡市| 蒲江县| 两当县| 兰考县| 辉南县| 万年县| 安化县| 长宁区| 柏乡县| 花垣县| 黄山市| 靖西县| 泰兴市| 新乡县| 赤壁市| 民丰县| 满城县| 厦门市| 宜兴市| 鄄城县| 本溪市| 丹阳市| 绩溪县| 彰化市| 同德县| 江川县| 上高县| 平塘县| 伊通| 林西县| 如东县| 庆安县|