首页 > web前端 > js教程 > 正文

JS中的单例模式实现对数据增删改查

亚连
发布: 2018-06-07 15:31:28
原创
2111人浏览过

这篇文章主要介绍了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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号