方法性能分析器--装饰者模式应用
<!DOCTYPE html> <html> <head><title>方法性能分析器</title><meta charset="utf-8"> </head> <body> <div id="list-container"></div><script>function $(id){return document.getElementById(id);} </script> <script>// ListBuilder class.var ListBuilder = function (parent, listLength) {this.parent = $(parent);this.listLength = listLength;};ListBuilder.prototype = {buildList: function (container) {var list = document.createElement('ul');list.setAttribute('id', container);this.parent.appendChild(list);var len = this.listLength;while (len) {var item = document.createElement('li');list.appendChild(item);--len;}},removeLists: function(id){var ele = $(id);ele.parentNode.removeChild(ele);}};// SimpleProfiler class.var SimpleProfiler = function (component) {this.component = component;};SimpleProfiler.prototype = {buildList: function () {var startTime = (new Date()).getTime();this.component.buildList();var elapsedTime = (new Date()).getTime() - startTime;console.log('buildList:' + elapsedTime + ' ms');}}; /*var list = new ListBuilder('list-container', 5000);list = new SimpleProfiler(list);list.buildList(); */// 通用化改造// MethodProfiler class.var MethodProfiler = function (component) {this.component = component;this.timers = {};for (var key in this.component) {// Ensure that the property is a functionif (typeof this.component[key] !== 'function') {continue;}// Add the methodvar that = this;(function (methodName) {that[methodName] = function () {that.startTimer(methodName);var returnValue = that.component[methodName].apply(that.component, arguments);that.displayTime(methodName, that.getElapsedTime(methodName));return returnValue;};})(key);}};MethodProfiler.prototype = {startTimer: function (methodName) {this.timers[methodName] = (new Date()).getTime();},getElapsedTime: function (methodName) {return (new Date()).getTime() - this.timers[methodName];},displayTime: function (methodName, time) {console.log(methodName + ': ' + time + ' ms');}};var list = new ListBuilder('list-container', 5000);list = new MethodProfiler(list);list.buildList('ol');list.buildList('ul');list.removeLists('ul');list.removeLists('ol'); </script> </body> </html>
转载于:https://www.cnblogs.com/webFrontDev/archive/2013/03/24/2978517.html
方法性能分析器--装饰者模式应用相关推荐
- Java设计模式12:装饰器模式
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...
- java中装饰器_Java设计模式12:装饰器模式
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...
- 尚硅谷设计模式笔记-装饰者模式
文章目录 一.需求 二.装饰者方法 三.装饰者模式的JDK应用 笔记来源: 尚硅谷 一.需求 星巴克咖啡订单项目(咖啡馆) : 咖啡种类/单品咖啡: Espresso(意大利浓咖啡). ShortBl ...
- 设计模式 —— 装饰者模式
目录 一.星巴克咖啡订单项目需求 二.方案 1-解决星巴克咖啡订单项目(较差) 三.方案 2-解决星巴克咖啡订单(好点) 四.装饰者模式定义 4.1 装饰者模式原理 4.2 装饰者模式解决星巴克咖啡订 ...
- Go 设计模式 - 装饰器模式
装饰模式使用对象组合的方式动态改变或增加对象行为.Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式.使用匿名组合,在装饰器中不必显式定义转调原对象方法. 设计模式 装饰器模式 装饰器模式主要 ...
- 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...
- 方法功能增强 - 继承、装饰者模式、动态代理
引言 方法功能的增强是开发时常做的事情,当官方或者第三方提供的API不能满足我们的需要时,可以在原有API的基础上加上我们自定义的功能来实现需求. 码农阶段需要掌握的功能增强的方式有三种:继承 ...
- 设计模式(二)(装饰者模式、工厂方法模式、抽象工厂模式)
三:装饰者模式 装饰者模式动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活. 主 ...
- JS设计模式——12.装饰者模式
装饰者模式概述 本章讨论的是一种为对象添加特性的技术,她并不使用创建新子类这种手段. 装饰者模式可以用来透明的把对象包装在具有同样接口的另一个对象中.这样一来,就可以给一个方法添加一些行为,然后将方法 ...
最新文章
- php7 $this-,在PHP中如何为匿名函数指定this?
- linux批量部署war工具,Linux批量部署工具Expect
- 鸿蒙唯独没有手机,想用鸿蒙OS,却没有华为手机?华为高层:还有1亿台设备可体验...
- [jQuery原理] jQuery基本结构
- ngnix 执行php 慢,【nginx】PHP有什么办法可以排查那些脚本或方法执行慢,需要优化?...
- PyMOTW-3 (Python 3 Module of the Week) 翻译团队召集
- Ubuntu配置Typora和picgo
- AD属性对照表 LDAP
- Qt学习 QVariant类(转)
- 论文笔记_S2D.19_2018-PR_基于膨胀卷积神经网络与软加权和推理的分层融合单目深度估计
- Markdown书写软件Typora的使用--图片上传(PicGo与Github/Gitee)及排版
- RabbitMQ3:RabbitMQ的使用方法
- 网页回拨-Web CallBack
- CentOs7下载与安装
- Android开发--CardView使用
- TFLearn初探之Activation与Dropout
- 2012-2013-1 (实变函数56, 高等数学84)
- 用硬实力,好作品,砸开阿里的前端开发金饭碗
- 华为设备流量抑制及风暴控制配置命令
- centos7安装twisted出现“致命错误:Python.h:没有那个文件或目录”的终极解决办法
热门文章
- java实现表达式求值_如何编写一个高效的Java表达式求值程序
- mysql锁表问题的解决方法_MYSQL锁表问题的解决方法
- flex java 开发环境搭建_Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)
- 实用的it知识学习_怎样能更快更好的学习好书法?分享一些比较实用的理论知识...
- Java1.5增加了新特性:可变参数
- android自动化持续集成,基于持续集成的Android自动化测试.pdf
- Redis的文件事件与时间事件处理
- 【C++grammar】名字隐藏与重定义
- a letter and a number(一封信和一个数字)
- php 字符串匹配 like,ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法...