精华内容
下载资源
问答
  • 就个人来讲,写了太多的命令式编程代码,所谓命令式代码就是业务需要怎样就写怎么样的功能,比如添加一个点击事件,比如进行一个验证等扥。写就写了很少站在设计模式的角度或者前人的角度去改善代码。 不给自己找...
  • 就个人来讲,写了太多的命令式编程代码,所谓命令式代码就是业务需要怎样就写怎么样的功能,比如添加一个点击事件,比如进行一个验证等扥。写就写了很少站在设计模式的角度或者前人的角度去改善代码。 不给自己找...

    关于设计模式,我的理解是它是业务代码的提前解决方案。意思就是说在没有真正的业务之前,设计模式就存在了,这个是显然的。设计模式是人长期从事业务总结的具有普通适用性的解决方案。

    就个人来讲,写了太多的命令式编程代码,所谓命令式代码就是业务需要怎样就写怎么样的功能,比如添加一个点击事件,比如进行一个验证等扥。写就写了很少站在设计模式的角度或者前人的角度去改善代码。

    不给自己找客观原因,最近开始关注设计模式,尝试从设计模式的角度改善开发。

    在开始单例设计模式之前首先要搞清楚js之中的apply和call的作用。

    apply和call的直接作用首先是运行函数,其次是根据对象是否发生改变,产生借方法和用方法的情况。apply和call的区别是前者接收数组作为第二个参数,而call接手的是参数列表。这个区别不具体说,说他们的作用

    1)运行函数栗子

    1    //运行函数
    2         function test(){
    3             alert(1);
    4         }
    5         test.apply();

    函数即便没有apply一样可以运行,但是在有些场合用到apply会显得专业。

    2)apply(this,arguments)中的this不发生改变,也就是直接利用对象方法,不存在借的概念

    1         var arr=[1,2,3];
    2         var max=Math.max.apply(null,arr);
    3         alert(max);

    3)this发生改变,这个时候是借助this这个对象借助其他对象的方法

     1         /*定义一个人类*/
     2         function Person(name, age) {
     3             this.name = name;
     4             this.age = age;
     5         }
     6         /*定义一个学生类*/
     7         function Student(name, age, grade) {
     8             Person.apply(this, arguments);
     9             this.grade = grade;
    10         }
    11         //创建一个学生类   
    12         var student = new Student("qian", 21, "一年级");
    13         //测试   
    14         alert("name:" + student.name + "\n" + "age:" + student.age + "\n" + "grade:" + student.grade);
    15         //测试结果name:qian age:21 grade:一年级   
    16         //因为在执行过程中this的对象发生改变,所以是this借助了Persion对象的方法。

    介绍完apply和this下面是单例设计模式解释。

    单例设计模式,核心是创造并且只返回一个对象。因为只有一个对象所以有缓存的概念。本文采用的是别人的案例,能够说清楚问题就是好案例;

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title> 单利模式应用</title>
     7 </head>
     8 
     9 <body>
    10     <div>
    11         <button id="openbtn">
    12             创建按钮
    13         </button>
    14         <script type="text/javascript">
    15         //设计模式核心嗲吗
    16         var getSingle = function(fn) {
    17             var result;
    18             return function() {
    19                
    20                 return (result || (result = fn.apply(this,arguments)));
    21             }
    22         }
    23 
    24         //业务代码之创建div代码
    25         var createDiv = function() {
    26             var div = document.createElement("div");
    27             div.innerHTML = "我是创建对象";
    28             console.warn('11');//多次点击只输出一次
    29             return div;
    30         }
    31        
    32         var createSingleDiv = getSingle(createDiv);
    33         //业务代码之触发事件
    34         document.getElementById("openbtn").onclick = function() {
    35             var div = createSingleDiv();
    36             document.getElementsByTagName("body")[0].appendChild(div);
    37         }
    38         </script>
    39         
    40     </div>
    41 </body>
    42 
    43 </html>

    上面的 || 有个小技巧,就是就近计算,如果result有值了后面就不会计算了。还有上面的apply只是起到运行作用。

    单例模式据说用处很多, 目前我知道的创建弹窗,创建遮罩层,实现jquery的one函数效果等。

    最后这里设计模式核心代码运用的是闭包,闭包可以保存作用域链,因此产生了静态变量的改变。因此产生了缓存的效果。

    本文结束。

    转载于:https://www.cnblogs.com/zhensg123/p/9023808.html

    展开全文
  • Web开发人员通过Java的缓存功能可以方便快捷的改善应用程序的性能。对于java应用程序来说,一个强大的分布式Java缓存系统(JCS),是用简单的API就可以进行高度配置的工具。这篇文章概要的介绍了JCS,并且展示了怎样...

       Web开发人员通过Java的缓存功能可以方便快捷的改善应用程序的性能。对于java应用程序来说,一个强大的分布式Java缓存系统(JCS),是用简单的API就可以进行高度配置的工具。这篇文章概要的介绍了JCS,并且展示了怎样用它为Web应用程序提速。

     

      很多的桌面应用程序正在被重写成Web应用程序,理想情况下,被重写后的应用程序应该和桌面版本的应用程序一样快捷并且具有可伸缩性。几乎所有的Web应用都可以通过JCS在速度方面获得大幅提高。经常性的缓存那些很少改变的的数据是减少用户等待时间的非常好的方法,用简单的API处理缓存数据的功能能够帮助我们实现这个目标。开源的JCSApache Jakarta 工程)就是这样的一个工具,这篇文章解释怎样配置和使用JCS来为Web应用程序缓存数据。

     

    JCS概要

     

    JCS是一个用Java语言编写的可以用于创建桌面和Web应用程序的缓存系统,它为一下处理提供了方便的机制

    ・在缓存中保存数据;

    ・从缓存中取得数据;

    ・从缓存中删除数据等。

      使用JCS,可以把被缓存数据保存到指定的不同的数据存储区域。JCS定义了四种核心存储区域的类型:memorydisklateralremote。我们可以一起使用这些核心存储区域来获得更大的缓存数据的灵活性。如可以指定首先被使用的存储区域,在缓存失败的时候使用另外一个存储区域。

     

    Memory

        Memory区域是一个使用LRULeast Recently Used)运算规则的纯内存缓存区域,在内存缓存区被填满的时候,LRU首先删除最近最少被使用的缓存数据。这个数据区有比较好执行效率,因此大多数的用户把它指定为默认首先被使用的缓存区。

     

    Disk 

       磁盘区是Web服务器的文件磁盘上的一个缓存数据的区域。要改善性能,可以在内存中保存缓存数据的键值(keys)而在文件磁盘上缓存实际的数据。在典型的首先使用内存区的JCS的配置中,任何不能在内存中持有的数据,就要被写到磁盘区中。

     

    Lateral 

         Lateral缓存区提供一种把缓存数据分配个横向关联的多个服务器的方法,缓存服务器必须打开一个用于监听的端口,并且建立一个socket链接。因为这个存储区不能保证缓存间数据的一致性,所以这成为我们要面对的潜在问题。但是如果要设计使用这个存储区,那么这个问题是不太可能发生的。

     

    Remote 

        Remote区使用RMIRemote Method Invocation)提供一个缓存区。这个存储区使用处理缓存数据的远程服务器。远程缓存服务器能够被多个JCS客户端应用程序用于保存缓存数据。被定义的监听器用于搜集来自客户端和服务器的的请求。这个缓存区有助于缓解对系列化和多链接点的开销。

     

    JCS配置

       配置JCS的过程就像创建和编写cache.ccf文件一样简单。Cache.ccf文件定义了要使用的缓存区以及这些缓存区的属性或选项,把这个文件结合到应用程序上需要一个方便快捷的刻度缓存的方法。下面是为了显示主要的配置点制作的一个尽可能简单的例子。你可以指定很多选项和配置来适应你所需要的正确的配置。

    最基本的cache.cff文件-----一个纯内存缓存配置

    jcs.default=jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes

    jcs.default.cacheattributes.MaxObjects=1000

    jcs.default.cacheattributes.MemoryCacheName=

    org.apache.jcs.engine.memory.lru.LRUMemoryCache

     

       在上面的配置中,最后一行指定了LRUMemoryCache作为内存缓存,并且在内存中保持的对象数被设定为1000

     

       大多数的应用程序的缓存系统需要比上面配置更广泛的配置,在下面的配置中,使用了内存区,并且在定义自己的存储区时,使用磁盘区。

     

    jcs.default=DISK_REGION

    jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes

    jcs.default.cacheattributes.MaxObjects=1000

    jcs.default.cacheattributes.MemoryCacheName=

      org.apache.jcs.engine.memory.lru.LRUMemoryCache

     

    jcs.region.OUR_REGION=DISK_REGION

    jcs.region.OUR_REGION.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes

    jcs.region.OUR_REGION.cacheattributes.MaxObjects=1000

    jcs.region.OUR_REGION.cacheattributes.MemoryCacheName=

      org.apache.jcs.engine.memory.lru.LRUMemoryCache

    jcs.region.OUR_REGION.cacheattributes.UseMemoryShrinker=true

    jcs.region.OUR_REGION.cacheattributes.MaxMemoryIdleTimeSeconds=3600

    jcs.region.OUR_REGION.cacheattributes.ShrinkerIntervalSeconds=60

    jcs.region.OUR_REGION.cacheattributes.MaxSpoolPerRun=500

    jcs.region.OUR_REGION.elementattributes=org.apache.jcs.engine.ElementAttributes

    jcs.region.OUR_REGION.elementattributes.IsEternal=false

     

    jcs.auxiliary.DISK_REGION=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory

    jcs.auxiliary.DISK_REGION.attributes=

      org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes

    jcs.auxiliary.DISK_REGION.attributes.DiskPath=c:/jcs/disk_region

    jcs.auxiliary.DISK_REGION.attributes.maxKeySize=100000

     

      在上面的配置中的第一行把DISK_REGION设定为默认的存储区。DISK_REGIONIndexedDiskCacheFactory类型,并且指定缓存文件要存放在磁盘上的c:/jcs/disk_region目录中。上面配置中的第二组定义了自己存储区,并且为它添加了一些选项,这种同时指定内存区和磁盘区的配置是常用的一种类型。上面配置中第三组中定义一个备用区。

     

        JCS有连个依赖:concurrentcommons-logging(在JCS1.2.7.0以前的版面中,有另外连个依赖:commos-collectionscommons-lang
    展开全文
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    选题:创新, 实用, 界面美观友好(15分) 难度:设计包含的难度(15分) 设计的完整(30分) 迭代和增量开发方式 迭代过程的优势 复杂系统-分解->多个简单系统 提高软件项目可控 降低软件开发风险 有效地...
  • 以微软公司生产的鼠标器为例,就其功能而言,只需要有三个按键就可以满足使用需要,但是,怎样才能让鼠标器的手感最好,而且经过长时间使用也不易产生疲劳感却是生产厂商需要认真考虑的问题。因此微软公司首先根据...
  • 甲状腺功能亢进伴发的精神障碍;紧张头痛;胃下垂;心血虚;迷路震荡;口腔结核溃疡;痰饮;游走结节脂膜炎;小儿脑震荡 ******************************************************************************...
  • 软件测试经典面试题 (超实用)

    热门讨论 2012-02-16 13:48:08
    14、TestDirector有些什么功能,如何对软件测试过程进行管理? 7 15、你所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)? 7 16、条软件缺陷(或者叫Bug...
  • 由于商人们的目光往往只局限在市场系统中自己这一小部分,所以,他们为市场系统进行的辩护通常十分拙劣,这种肤浅的辩护对阐明市场功能的宝贵价值毫无裨益。公司能否取得成功,部分地取决于它对经济状况和周围环境...
  • 在Oracle公司,Kyte专门负责Oracle数据库,他的任务是帮助使用Oracle数据库的客户,并与他们共同设计和构建系统,或者对系统进行重构和调优。在进入Oracle公司之前,Kyte是一名系统集成人员,主要为美国军方和政府...
  • asp.net知识库

    2015-06-18 08:45:45
    页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp...
  • 试想一下,机器臂如果砸到生产线上的新车,或者更糟,砸到生产工人,后果会怎样? 有几种方法可以确保收到正确数据后才执行动作。最简单的方式就是控制器回读所发送的数据。如果接收的数据与发送的数据不匹 配,则说明...
  • 13.1.3 改善语句性能 505 13.2 表分区机制 507 13.2.1 区间分区 508 13.2.2 散列分区 510 13.2.3 列表分区 513 13.2.4 间隔分区 515 13.2.5 引用分区 520 13.2.6 组合分区 524 13.2.7 行移动 526 13.2.8 ...
  • 什么是VLAN

    2013-10-23 09:59:12
     IP 组播实际上也是一种VLAN的定义,即认为一个组播组就是一个VLAN,这种划分的方法将VLAN扩大到了广域网,因此这种方法具有更大的灵活,而且也很容易通过路由器进行扩展,当然这种方法不适合局域网,主要是效率...
  • 而变频空调通过压缩机转速的变化,可以实现制冷量随室外温度的上升而上升,下降而下降,这样就实现了制冷量与房间热负荷的自动匹配,改善了舒适,也节省了电力。 2、控温精确 由于采用的是不停机控制温度,避免...
  • 5.6 数据一致和数据并发 155 5.6.1 数据库写入器和写前协议 155 5.6.2 SCN 156 5.6.3 撤销管理 156 5.7 备份与恢复体系结构 157 5.7.1 用户管理的备份与恢复 157 5.7.2 RMAN 157 5.7.3 Oracle ...
  • 在所有这些表面的更新背后,实际上ggplot2很大程度上被重写了,例如开始使用R自带的S3泛型函数设计,以及将过去ggplot2的功能继续模块化为一些独立的包,一个典型的例子就是标度部分的功能被抽象到scales包中,从...
  • 总结对方与自我的流程并参考案例进行各方面的分析,针对易产生陷阱的地方,加固自我策略的改善及优化 记录下音频、视频、纸质资料等证据并留在自己手中,以防万一产生对自己不利的局面,以作为应对手段 这样集群...
  • php高级开发教程说明

    2008-11-27 11:39:22
    容将针对大部分基本的却是非常重要的开发中的实际问题进行讨论:改善代码质量以及基本设 计和文件管理的问题。陈述完这些后,我们创建一个应用程序接口( A P I),采取简单的、实用 的方式使你熟悉这一新的思想,...
  • §6.1.2 改善产品系统的优化 85 §6.2 优化的优先步骤 86 §6.2.1 步骤1:优化商业规则 86 §6.2.2 步骤2:优化数据设计 87 §6.2.3 步骤3:优化应用程序设计 87 §6.2.4 步骤4:优化数据库的逻辑结构 87 §6.2.5 ...
  • 它是对现有类加以利用,并为其添加新功能的一种有效途径(同时可以修改它,这是第7章的主题)。通过继承来重复使用原有的代码时(再生),一般需要保持“基础类”不变,只是将这儿或那儿的东西串联起来,以达到预期...
  • 本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误的分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
  • 超爽的自学课件(java)

    2007-09-16 16:04:04
    怎样创建一个对象;对基本数据类型和数组的一个介绍;作用域以及垃圾收集器清除对象的方式;如何将Java中的所有东西都归为一种新数据类型(类),以及如何创建自己的类;函数、自变量以及返回值;名字的可见度以及...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

怎样进行性功能改善