javascript设计模式之単例模式


Javascript中的设计模式

JavaScript是一门特别灵活的语言,早些年被认为是玩具式的语言,只能做一点为网页涂脂抹粉的小差事。项目工程也不是很大,更无从说起设计模式在JavaScript的应用,但随着Nodejs以及html5和web2.0的兴起,JavaScript本身变得越来越受重视。

但是很多本该有的东西javascript都有,并没有作为正式的部分。这些年来人们利用自己对计算机编程的思想,利用了很多晦涩的技巧实现了很多javascript设计者都未曾预计到的任务,比如各种设计模式的实现,以及面向对象编程等。

设计原则

设计模式的存在原因是为了代码的复用性,增加代码的可维护性,有如下原则:

【开闭原则】,对扩展开放,对修改关闭,ps高考的试卷。

【里式转换原则】,子类继承父类,单独掉完全可以运行,ps盗版光盘

【依赖倒转原则】,引用一个对象,如果这个对象有底层类型吗,直接引用底层,

【接口隔离原则】 每一个接口应该是一种角色,ps汽车的usb插口,

【合成/聚合复用原则】 新的对象应使用一些已有的对象,使之成为新对象的一部分,

【迪米特原则】, 一个对象应对其他对象有尽可能少的了解

设计模式之单例模式

单例模式的概念解读

単例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在则创建返回,这样就保证一个只有一个实例对象。在JavaScript里,単例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。

单例模式的概念拟物化解读

image.png

有门则进去,没门则创建门,只有一个门可以进去

单例模式的作用与注意事项

单例模式作用:

1.模块间通信。系统中某个类的对象只能存在一个。

2.系统中某个类的对象只能存在一个。

3.保护自己的属性和方法

注意事项:

注意this的使用。

闭包容易造成内存泄漏,不需要的赶快干掉。

注意new的成本

単例模式代码实战和总结

代码实战

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
<script type="text/javascript">
    //1.独立的对象建立两个一个xiaowang一个xiaoli
    //2.让xiaoli跟xiaowang通过门铃通信
    //3.先看一下xiaowang家有没有门如果有门之间通过门铃通讯didi如果没有门先建门
    //4.两个単例之间开始通信
    var xiaowang = (function(argument) {
        var xiaowangjia = function(message) {
            this.menling = message;
        }
        var men;
        var info = {
            sendMessagefunction(message) {
                if (!men) {
                    men = new xiaowangjia(message);
                };
                return men;
            }
        }
        return info;
    })();
    var xiaoli = {
        callXiaowangfunction(msg) {
            var _xw = xiaowang.sendMessage(msg);
            alert(_xw.menling);
            _xw = null;//等待垃圾回收
        }
    };
    xiaoli.callXiaowang('didi');
</script>