JS基于設(shè)計模式中的單例模式(Singleton)實現(xiàn)封裝對數(shù)據(jù)增刪改查功能
本文實例講述了JS基于設(shè)計模式中的單例模式(Singleton)實現(xiàn)封裝對數(shù)據(jù)增刪改查功能。分享給大家供大家參考,具體如下:
單例模式
單例模式的核心結(jié)構(gòu)中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實例
單例模式最初的定義出現(xiàn)于《設(shè)計模式》(艾迪生維斯理, 1994):“保證一個類僅有一個實例,并提供一個訪問它的全局訪問點?!?/p>
單例模式定義:“一個類有且僅有一個實例,并且自行實例化向整個系統(tǒng)提供。”
var Singleton = (function(){
SingletonClass() {
}
var singleton = null;
return {
getInstance: function() {
if (singleton == null) {
singleton = new singletonClass();
} else {
return singleton;
}
}
}
})();
Singleton.getIntance();
前端經(jīng)常用到一些和接口相關(guān)的增刪改查異步操作。我們來舉例,我在操作數(shù)據(jù)列表時,常常少不了,增加 修改 刪除功能。有的方案是用同步的(刷新頁面),用戶體驗好一些用異步;
代碼如下
增加功能
$(".add").click(function(){
$.ajax({
type: "post"
dataType:"json",
url: "http://www.dbjr.com.cn/",
data: {name:"csdn博客",dir:"web前端"},
success: function( result ){
if ( result.status ) { alert("新增成功!") } else { alert("新增失敗") }
},
error: function(){
alert("新增出現(xiàn)異步,請得新增加或聯(lián)系技術(shù)管理員");
}
});
});
刪除功能
$(".del").click(function(){
$.ajax({
type: "post"
dataType:"json",
url: "http://www.dbjr.com.cn/",
data: {id:"1"},
success: function( result ){
if ( result.status ) { alert("刪除成功!") } else { alert("刪除失敗") }
},
error: function(){
alert("新增出現(xiàn)異步,請得新增加或聯(lián)系技術(shù)管理員");
}
});
});
上面這二個代碼片段簡單描述了,增加和刪除功能的JS代碼。有的同學(xué)發(fā)現(xiàn)了,他們有共同點,就是ajax請求中有一部分是相同的,并且刪除功能如果在其它地方也用到呢?,那在其它地方也要寫一代碼這種相同的代碼。感覺很不舒服
我們改進一下
var SingletonCRUD = (function(){
SingletonClass() {}
SingletonClass.prototype = {
constructor: SingletonClass,
add: function( data ) {
$.ajax({
type: "post"
dataType:"json",
url: "http://www.dbjr.com.cn/",
data: data,
success: function( result ){
if ( result.status ) { alert("新增成功!") } else { alert("新增失敗") }
},
error: function(){
alert("新增出現(xiàn)異步,請得新增加或聯(lián)系技術(shù)管理員");
}
});
},
remove: function( data ) {
$.ajax({
type: "post"
dataType:"json",
url: "http://www.dbjr.com.cn/",
data: data,
success: function( result ){
if ( result.status ) { alert("刪除成功!") } else { alert("刪除失敗") }
},
error: function(){
alert("新增出現(xiàn)異步,請得新增加或聯(lián)系技術(shù)管理員");
}
});
}
}
var singleton = null;
return {
getInstance: function() {
if (singleton == null) {
singleton = new singletonClass();
} else {
return singleton;
}
}
}
})();
var curd = SingletonCRUD.getIntance();
$(".add").click(function(){
var data = {"name":"name"};
curd.add( data );
});
$(".del").click(function(){
var data = {"id": 1};
curd.remove( data );
});
經(jīng)常用Singleton實例來做一些Tool工具類;
使用設(shè)計模式優(yōu)點:解耦合、可讀性強、代碼結(jié)構(gòu)清晰;
通過上面的小例子,把點擊事件里的獲取數(shù)據(jù)(click的事件函數(shù))和操作數(shù)據(jù)(ajax請求)相分離;
通過對單例模式的優(yōu)化后的代碼:
var SingletonCRUD = (function(){
SingletonClass() {}
SingletonClass.prototype = {
constructor: SingletonClass,
ajax: function(url, data success ){
$.ajax({
type: "post"
dataType:"json",
url: url,
data: data,
success: success,
error: function(){
alert("新增出現(xiàn)異步,請得新增加或聯(lián)系技術(shù)管理員");
}
});
},
add: function( data ) {
this.ajax("http://www.dbjr.com.cn/", data, function( result ){
if ( result.status ) { alert("新增成功!") } else { alert("新增失敗") }
});
},
remove: function( data ) {
this.ajax("http://www.dbjr.com.cn/", data, function( result ){
if ( result.status ) { alert("刪除成功!") } else { alert("刪除失敗") }
});
}
}
var singleton = null;
return {
getInstance: function() {
if (singleton == null) {
singleton = new singletonClass();
} else {
return singleton;
}
}
}
})();
SingleClass中的ajax方法,也相當(dāng)于一個門面模式(Facade),隱藏內(nèi)部細(xì)節(jié),對外暴露一個接口;
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
JavaScript實現(xiàn)簡潔的俄羅斯方塊完整實例
這篇文章主要介紹了JavaScript實現(xiàn)簡潔的俄羅斯方塊,以完整實例形式分析了JavaScript實現(xiàn)俄羅斯方塊游戲的具體技巧,代碼備有詳盡的注釋便于理解,需要的朋友可以參考下2016-03-03
JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊列鏈表代碼分析
這篇文章主要為大家介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊列鏈表代碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12

