`
deejay
  • 浏览: 144990 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ExtJS 设计模式之一(单例模式)

阅读更多

ExtJS 设计模式之一(单例模式)

<!-- start node.tpl.php -->

Extjs 发展至今,传承了YUI的伟大精髓, YUI得到了Douglas Crockford(任职于 Yahoo! 的一名 JavaScript 传道者和架构师,他是全球最有造诣的 JavaScript 语言专家之一,Blog:http://www.crockford.com/) 大师的赞同,而ExtJS也是将YUI的模式脚本编程学习使用的淋漓尽致,并且还给它做了几套华丽的CSS嫁衣…., 而在ExtJS越发耀眼的同时,我等初学者在使用ExtJs的时候也是晕呼其呼。(好在2.0 推出之后,官方的文档,像雨后春笋一样,开始覆盖到方方面面。)

其实,拨开ExtJS华丽的外衣,翻阅其体内精致的代码,不难发现一些我们耳熟能详的设计模式。

在早期1.0,1.1的好多例子中,我们会看到这样风格的代码。

01.var Oo= function(){
02.  var x;
03.  var y;
04.  return{
05.  a:function(){
06.  ...
07.  },
08.  b:function(){
09.  ...
10.  }
11.  }
12.}();

 

咂一看,不是我们能理解的方式, function(){}(), 是何意?。
//()在这里,意味着方法已经执行,并且return里面的已经产生, 这样可能很难理解,那等同与执行 function oo(){},这样是否好理解些了?
BTW :这里要引入JavaScript的一个高级概念,“闭包”。(具体内容参考《JavaScript The Definitve Guid,5th Eddion》Section 8.8 –Function Scope and Closures ,也是被Douglas Crockford推荐的为数不多的两本书籍之一。), 当然不急着去翻,先把我的废话看完。

好了,看这种使用别扭的使用方式, 而这种方式,在我们的页面,或者其他类中, 调用Oo的a方法的时候,形式如下

 

1.Ext.onReady(Oo.a);

 

对,正是这样的一种JS编程方式,被Douglas Crockford作为JS的一种单例的实现, 大师还把它叫做“Module Pattern”,

好,如果我们不用所谓单例呢?, 就看看传统的对象方式,同学们肯定在Pototype盛行的时代,已经弄的一清二楚。

 

01.0o = function(){
02.  this.x;
03.  this.y;
04.}
05.Oo.prototype = {
06.  a:function(){
07.  this.x = 100;
08.  },
09.  b:function(){
10.  this.y = 200;
11.  }
12.}
13.//调用方式
14.Ext.onReady(function(){
15.  var o = new Oo();
16.  0.a();
17.});

 

再来,假使是个初学者,不知道对象继承,怎么办。更土的写法,人人都会。

 

1.var x,y
2.function a(){
3.  x=100;
4.}
5.function b(){
6.  y=200;
7.}

 

调用方式。
不用说了,只要a(),就会把x设置, 全世界的开发者都公认 ,全局变量是邪恶的,,而且随着你调用的不注意,将会越来越臃肿,导致Memory Lacks 内存泄露。

以上几个简单的举例可以看出, 类 比Java 一样, Oo.a直接调用,好比一个静态类,直接访问。 而prototype需要创建对象后访问其成员。
第一种方式,在任何地方都不需要创建(只创建一次),
而第二种方式,需要在每次调用的时候,创建对象。
第三种老土的代码,希望大家尽量少写,这不是程序员风格的体现。

对于发展到今天,如此庞大的ExtJS2.0,自然也要考虑道自己的运行和调用不要让new 变得太臃肿,在ExtJS中我们发现, 在会被各个组件大量频繁调用到的一些工具类中,单例运用较为频繁。

Ext 源码中,设计使用单利的代码片段。

 

01.//source/core/DomHelper.js
02.Ext.DomHelper= function() {
03.  //private attributes
04.  ..
05.  return{
06.  
07.}
08.}();
09.  
10.//source/core/DomQuery.js
11.Ext.DomQuery =fucntion(){
12.  
13.}();

 

后记: 由于JavaScript,具有prototype,call,apply来实现继承,面向对象来开发,又有闭包等特性来进行函数编程。有函数编程和面向对象的双重性质, 使得JavaScript格外的灵活,难以驽驾, 开发者选择多种风格来进行编码,在一个整体项目会容易会走向凌乱和灭亡。 这就更需要我们从大师的经验总结,以及ExtJS这种优秀的设计中,去体味学习,站在巨人的肩膀上前进…..

另外值得一提出的,ExtJs必须要求你的页面为XHTML,当你在别的浏览器下跑的非常顺畅,而唯独IE下有那么点瑕疵(不是脚本报错的),你应当检查下你是否把你的页面定义成XHTML。

作者:Totodo

分享到:
评论

相关推荐

    ExtJS 设计模式之一.docx

    单例模式是ExtJS设计模式之一,通过合理的使用可以极大地提升代码的质量和效率。了解和掌握单例模式不仅可以帮助我们在日常开发中编写出更好的代码,还可以让我们更加深刻地理解JavaScript的核心机制。

    ExtJS设计模式

    ### ExtJS设计模式详解 #### 引言 随着前端技术的发展与成熟,越来越多的企业和开发者开始重视前端架构的搭建与优化。作为一款优秀的前端框架,ExtJS不仅在UI组件管理和风格统一方面表现出色,同时也引入了许多经典...

    extjs 设计模式 operamasks 底层框架

    自己的理解,重写了公司底层代码,用的设计模式做多就是单例和模板方法,可以看下实际公司是怎么来用的,还有就是面向接口编程,如果给你在我现在这个基础上来改,自己去写主从表,看可不可以写出来.自己如何认真的...

    extJs 开发技术详解(第1章)

    - **模式应用**: 在ExtJS的源代码中可以看到许多设计模式的应用,如工厂模式、单例模式等。 #### 四、ExtJS的应用场景 **4.1 Web应用开发** - **快速开发**: 由于提供了丰富的组件库和高度封装的功能,ExtJS非常...

    JAVA.Extjs.Hibernate.Web开发应用免费教程集锦

    9. **设计模式**:Java企业设计模式教程介绍了在JAVA开发中常见的设计模式,如单例、工厂、装饰器等,这些模式对于写出高质量、可维护的代码至关重要。 10. **面试与笔试题**:提供了一系列的JAVA面试笔试题,帮助...

    ssh+extjs+mysql整合

    Struts2与Spring的集成使得Action可以直接利用Spring管理的Bean,避免了单例模式和线程安全问题。 3. **Hibernate**:Hibernate作为ORM工具,将Java对象映射到MySQL数据库的表,简化了数据库操作。通过编写实体类和...

    JavaWeb课程设计-图书馆管理系统.pdf

    《JavaWeb课程设计-图书馆管理系统》是一份关于利用JavaWeb技术构建图书馆管理系统的实验报告,旨在通过实践巩固学习的JavaWeb技术,应用设计模式,并实现一个功能完备的小型系统。该系统涵盖了图书入库、作废、借书...

    JavaWeb课程设计——图书馆管理系统.doc

    2. 设计模式应用:让学生初步体验设计模式,如单例模式,以提高代码的复用性和系统架构的合理性。 3. 系统实现:结合数据库技术,构建一个功能完整的图书管理系统,实现图书馆的日常管理功能。 二、实验内容 系统需...

    JavaWeb课程设计——图书馆管理系统.pptx

    6. 设计模式:系统使用了单例模式(来自 GoF 提出的设计模式),提高了系统的可维护性和扩展性。 该系统是一个基于 JavaWeb 的图书馆管理系统,采用了现代的技术和设计模式,具有良好的可维护性、扩展性和用户体验...

    JavaWeb课程设计图书馆管理系统.docx

    2. 应用设计模式:项目中初步应用了GoF(Gang of Four)设计模式,如单例模式,提高代码的可维护性和可复用性。 3. 数据库集成:通过与数据库的交互,实现数据的存储和查询,提升数据库管理技能。 二、实验内容与...

    JavaWeb课程设计——图书馆管理系统.pdf

    1. **设计模式**:项目中提到了GoF设计模式,即Gang of Four设计模式,这是软件工程中常用的一套经典设计模式,包括工厂模式、单例模式、观察者模式等。在这个图书馆管理系统中,单例模式被用于`...

    JavaWeb课程设计——图书馆管理系统.docx

    4. **代码实现**:使用Java语言编写,结合设计模式如单例模式和模板方法模式,优化代码结构。 **三、框架结构与设计模式** 1. **MVC框架**:将展示层、业务逻辑层和数据访问层分离,使代码结构清晰,易于维护。 2. ...

    企业人力资源系统的设计与实现

    5. **设计模式**:设计模式是解决常见软件设计问题的模板,如工厂模式、单例模式和观察者模式等。在项目中运用设计模式,可以提高代码的可读性和可重用性,增强系统的灵活性。 6. **系统需求分析和设计**:需求分析...

Global site tag (gtag.js) - Google Analytics