这篇文章主要介绍了js基于设计模式中的单例模式(singleton)实现封装对数据增删改查功能.结合实例形式分析了javascript基于单例模式结合ajax针对数据库进行增删改查的相关操作技巧,需要的朋友可以参考下
本文实例讲述了JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能。分享给大家供大家参考,具体如下:
单例模式
单例模式的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var Singleton = ( function (){
SingletonClass() {
}
var singleton = null;
return {
getInstance: function () {
if (singleton == null) {
singleton = new singletonClass();
} else {
return singleton;
}
}
}
})();
Singleton.getIntance();
|
登录后复制
前端经常用到一些和接口相关的增删改查异步操作。我们来举例,我在操作数据列表时,常常少不了,增加 修改 删除功能。有的方案是用同步的(刷新页面),用户体验好一些用异步;
代码如下
增加功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $( ".add" ).click( function (){
$.ajax({
type: "post"
dataType: "json" ,
url: "http://www.jb51.net/" ,
data: {name: "csdn博客" ,dir: "web前端" },
success: function ( result ){
if ( result.status ) { alert( "新增成功!" ) } else { alert( "新增失败" ) }
},
error: function (){
alert( "新增出现异步,请得新增加或联系技术管理员" );
}
});
});
|
登录后复制
删除功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $( ".del" ).click( function (){
$.ajax({
type: "post"
dataType: "json" ,
url: "http://www.jb51.net/" ,
data: {id: "1" },
success: function ( result ){
if ( result.status ) { alert( "删除成功!" ) } else { alert( "删除失败" ) }
},
error: function (){
alert( "新增出现异步,请得新增加或联系技术管理员" );
}
});
});
|
登录后复制
上面这二个代码片段简单描述了,增加和删除功能的JS代码。有的同学发现了,他们有共同点,就是ajax请求中有一部分是相同的,并且删除功能如果在其它地方也用到呢?,那在其它地方也要写一代码这种相同的代码。感觉很不舒服
我们改进一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | var SingletonCRUD = ( function (){
SingletonClass() {}
SingletonClass.prototype = {
constructor: SingletonClass,
add: function ( data ) {
$.ajax({
type: "post"
dataType: "json" ,
url: "http://www.jb51.net/" ,
data: data,
success: function ( result ){
if ( result.status ) { alert( "新增成功!" ) } else { alert( "新增失败" ) }
},
error: function (){
alert( "新增出现异步,请得新增加或联系技术管理员" );
}
});
},
remove: function ( data ) {
$.ajax({
type: "post"
dataType: "json" ,
url: "http://www.jb51.net/" ,
data: data,
success: function ( result ){
if ( result.status ) { alert( "删除成功!" ) } else { alert( "删除失败" ) }
},
error: function (){
alert( "新增出现异步,请得新增加或联系技术管理员" );
}
});
}
}
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 );
});
|
登录后复制
经常用Singleton实例来做一些Tool工具类;
使用设计模式优点:解耦合、可读性强、代码结构清晰;
通过上面的小例子,把点击事件里的获取数据(click的事件函数)和操作数据(ajax请求)相分离;
通过对单例模式的优化后的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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( "新增出现异步,请得新增加或联系技术管理员" );
}
});
},
add: function ( data ) {
this.ajax( "http://www.jb51.net/" , data, function ( result ){
if ( result.status ) { alert( "新增成功!" ) } else { alert( "新增失败" ) }
});
},
remove: function ( data ) {
this.ajax( "http://www.jb51.net/" , data, function ( result ){
if ( result.status ) { alert( "删除成功!" ) } else { alert( "删除失败" ) }
});
}
}
var singleton = null;
return {
getInstance: function () {
if (singleton == null) {
singleton = new singletonClass();
} else {
return singleton;
}
}
}
})();
|
登录后复制
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
在ES6中子组件调用父组件使用方法
在angular中如何制作动态表单
在angularjs中使用$http实现异步上传Excel文件方法
以上就是JS中的单例模式实现对数据增删改查的详细内容,更多请关注php中文网其它相关文章!