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

首頁 > 編程 > JavaScript > 正文

Javascript實現(xiàn)單例模式

2019-11-20 10:43:02
字體:
供稿:網(wǎng)友

單例模式也稱作為單子模式,更多的也叫做單體模式。為軟件設(shè)計中較為簡單但是最為常用的一種設(shè)計模式。

單例模式的介紹:

    在應(yīng)用單例模式時,生成單例的類必須保證只有一個實例的存在,很多時候整個系統(tǒng)只需要擁有一個全局對象,才有利于協(xié)調(diào)系統(tǒng)整體的行為。比如在整個系統(tǒng)的配置文件中,配置數(shù)據(jù)有一個單例對象進行統(tǒng)一讀取和修改,其他對象需要配置數(shù)據(jù)的時候也統(tǒng)一通過該單例對象來獲取配置數(shù)據(jù),這樣就可以簡化復(fù)雜環(huán)境下的配置管理。

    單例模式的思路是:一個類能返回一個對象的引用(并且永遠是同一個)和一個獲得該實例的方法(靜態(tài)方法,通常使用 getInstance 名稱)。那么當(dāng)我們調(diào)用這個方法時,如果類持有的引用不為空就返回該引用,否者就創(chuàng)建該類的實例,并且將實例引用賦值給該類保持的那個引用再返回。同時將該類的構(gòu)造函數(shù)定義為私有方法,避免其他函數(shù)使用該構(gòu)造函數(shù)來實例化對象,只通過該類的靜態(tài)方法來得到該類的唯一實例。

一般情況下,Javascript每次new一個對象就產(chǎn)生一個實例,實例指向不同的地址。就像如下:

(function(){function Person(name){this.name = name;}Person.prototype.work = function(){console.log(this.name + " is working");}var p1 = new Person("Darren");p1.work();var p2 = new Person("Jack");p2.work();}());

以上,每次new出一個Person對象都是不同的。

如何在Javascript中實現(xiàn)單例模式呢?

--在生成某各對象時先判斷是否存在。存在就不生成對象,不存在就生成對象。

(function(){var PersonSingleton = (function(){var instance;function init(){return {name: 'Anonymous',work: function(){console.log(this.name + ' working');}};}return {getInstance: function(){if(!instantiated){instantiated = init();}return instantiated;}}})();var p1 = PersonSingleton.getInstance();p1.work();var p2 = PersonSingleton.getInstance();p2.work();}());

以上,通過PsonSIngleton對象的getInstance方法得到的實例每次都是一樣的。

關(guān)于javascript單例模式的相關(guān)知識就給大介紹到這里,希望對大家有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇赉县| 志丹县| 海南省| 保亭| 饶平县| 镇江市| 司法| 奎屯市| 饶河县| 正镶白旗| 金山区| 深泽县| 巫山县| 铜鼓县| 政和县| 台安县| 乐安县| 扎囊县| 平遥县| 千阳县| 原平市| 闻喜县| 五台县| 五大连池市| 德昌县| 永登县| 台南市| 城市| 巢湖市| 瓦房店市| 奇台县| 隆回县| 宝兴县| 清流县| 温宿县| 安义县| 逊克县| 石门县| 菏泽市| 方山县| 西乌|