`

Javascript面向对象之三单例模式-《javascript设计模式》笔记

 
阅读更多

1.单例模式概述
源自百度百科对于单例模式的定义:
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

在javascript的世界里,其实没有严格的对象和类定义,“一切皆对象”使得javascript中都是对象,不能像java,c++或者php使用特定的方法返回一个实例来实现,因此对javascript来说,我们要创造的是一个“不能被多次实例化的”对象,也就是说只能实例化一次的对象。

2.简单单例模式:
只能实例化一次的对象也就可以使用“对象字面量”的定义方式来实现:
var singleton = {
    attribute:'',
    method:function(){}
}
这样定义的对象,不能使用new singleton的方式来生成另外的对象(不存在prototype和constructor属性)。

3.包含私有成员的单例模式:
如果看过之前的我写的关于类成员的文章,自然的我们就能想到用闭包来实现,既然要用的闭包,那么一定会用到函数和函数返回值,于是,这样的单例模式如下:
var singleton = function(){
   var private_attribute = '';
   functioin private_method(){}
   return {
     public_attribute:'',
     public_method:function(){}
   };
}
还记得匿名函数吗?通常在使用闭包的时候会使用,改进之后如下:
var singleton = (function(){
   var private_attribute = '';
   functioin private_method(){}
   return {
     public_attribute:'',
     public_method:function(){}
   };
})();

4.惰性加载(lazy loading,延迟加载)单例模式
2,3中所示单例模式定义方式都是在定义时创建的单例,这样很浪费内存,如何能在使用的时候才创建(lazy loading,更多的用于图片的延迟加载)呢?所谓惰性加载,也就是先定义,然后在某个地方才创建对象,所以必须要使用函数,我们知道在java或者php中单例模式通常使用一个静态方法来创建,同理,我们再改进一下闭包形式的定义式:

var singleton = (function(){
    var unique;
    function getinstance(){
        if(!unique){
            unique = construct();
            return unique;
        }
    }
    function construct(){
        var private_member;
        function private_method(){}
        return {//这里才是真正的单例对象
            public_member:'',
            public_method:function(){}
        };
})();

这样调用一个单例对象的方法:
singleton.getinstance().publicmethod();
这样只有在调用方法或引用属性的时候才会真正的创建unique对象,就是使用的时候比较麻烦:)

5.简单mvc代码风格

顺便在这里分享一下我写js的一个简单风格,尽管js是一个前台代码,但是就其本身而言,也可以将它的内容分为mvc(model,controller,view,关于mvc的概念请baidu/google),因此在写一个页面的js代码的时候,我会这么写:
//函数封装在此
var controller = {
    init:function(){}
};
//页面相关内容封装在此
var view = {
    table:{},
    banner:{},
    foot:{}
};
//数据相关内容封装在此
var model = {
   table_data:{}
}
在页面onload的时候调用controoler.init();完成初始化工作(数据加载,页面渲染,事件监听等),这样写的目的是尽量将一些相同的逻辑组织在一起,方便查找和修改,目前只是一个雏形,希望在看完《javascript设计模式》这本书之后能写一个轻量级的模型出来^_^

0
0
分享到:
评论

相关推荐

    to-establish-3-Student-data.rar_establish三单

    在IT行业中,"to-establish-3-Student-data.rar_establish三单"这个标题暗示了我们正在处理一个关于创建和管理学生数据的项目。这个项目可能是一个小型数据库或数据管理应用程序,设计用于存储和操作三个学生的相关...

    标准作业三单(SOS、JIS、MDS)

    标准作业三单(SOS、JIS、MDS) 标准作业三单是生产流程中的一种重要工具,旨在确保生产过程的标准化、安全性和质量。标准作业三单由三部分组成:标准化操作单(SOS)、岗位指导书单(JIS)和物料数据单(MDS)。 ...

    2019译林版高中英语必修三单词表.pdf

    2019译林版高中英语必修三单词表.pdf

    初中英语动词的三单形式.doc

    初中英语学习中,动词的三单形式是基础语法之一。该文档详细介绍了动词的三单形式,包括其定义、分类、使用场景和实践练习。 一、动词的三单形式定义 动词的三单形式是指动词在第三人称单数形式时的变位形式。例如...

    数据库原理及应用实验三单表查询.sql

    这个是数据库原理及应用第二版327页实验三单表查询的脚本文件,使用这个脚本文件可以一键完成实验内容。

    电子政务-三单芯地埋式电缆分支箱.zip

    "三单芯"通常指的是电缆由三个独立的导体(芯)组成,这种设计可以提供三个独立的电力通路,适用于高压或低压电力传输。而"地埋式"意味着这些电缆分支箱被安装在地下,减少了对城市空间的占用,同时提高了安全性和...

    算数平方根三单.pdf

    算数平方根三单.pdf

    电子政务-三单相合成型交流变频调速异步电动机.zip

    5. 安全与可靠性:考虑到电子政务系统的特殊性,三单相合成型交流变频调速异步电动机在设计时需满足高安全标准,包括过载保护、短路保护、防雷击、防电磁干扰等,确保系统运行的安全性和稳定性。 6. 维护与管理:在...

    高一英语外研版必修三单词表.doc

    【高一英语外研版必修三单词表】 在学习高一英语外研版必修三的过程中,掌握单词是至关重要的。以下是一些关键的词汇及其详细解释: 1. **across** - 介词,表示横过或穿过某个物体或地方。 2. **boot** - 名词,...

    一般现在时及三单综合.doc

    【一般现在时】是英语中最基础的时态之一,它主要用来表示经常性、习惯性的动作,事物或人物的特征或状态,以及客观现实、真理或规律。在使用一般现在时,我们通常会搭配一些时间状语,比如“often, usually, always...

    slf4j-parent-1.5.6.pom_my parent是不是三单

    slf4j-parent-1.5.6.pomslf4j-parent-1.5.6.pom

    英语必修三单词表.doc

    英语必修三单词表.doc

    Book43三单.doc

    太谷二中“三·五·三”学导型课堂是一种高效的教学模式,旨在通过精心设计的教学工具单来促进学生对知识的深入理解和应用。在高一年级英语学科中,教师靳志丽为Module 3 Body Language and Non-verbal ...

    三单形式的练习题.doc

    三单形式的练习题.doc

    天安门广场一案三单.doc

    天安门广场一案三单.doc

    《春潮》一案三单.doc

    1. 教学模式优化:《春潮》一案三单中提到的“优化教学模式 构建高效课堂”是指通过改革传统的教学方式,以提高教学效率和教学质量。这种模式强调以学生为中心,注重激发学生的学习兴趣,鼓励主动参与和自主学习。 ...

    初中一般现在时及三单动词的变化规则.doc

    **三单动词的变化规则**: 1. **一般情况**:大部分动词在第三人称单数形式下只需在其后加-s,如:run -> runs,work -> works。 2. **特殊结尾**:以 s, x, sh, ch, o 结尾的动词,加-es,如:wish -> wishes,...

    实验三单管放大电路仿真文件.ms12

    实验三单管放大电路仿真文件.ms12

    佛山南海行政审批“三单”管理.docx

    佛山南海行政审批“三单”管理.docx

Global site tag (gtag.js) - Google Analytics