- 浏览: 7928892 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
public class Student {
private String name;
private String course;
private double score;
public Student(){}
public Student(String name, String course, double score) {
this.name = name;
this.course = course;
this.score = score;
}
public double getScore() {
return this.score;
}
//计算学生总成绩
public double totalScore(String[] names, String[] courses, double[] scores) {
int nLen = (null == names) ? 0 : names.length;
int cLen = (null == courses) ? 0 : courses.length;
int sLen = (null == scores) ? 0 : scores.length;
double total = 0;
if (nLen == cLen && cLen == sLen) {
for (int i = 0; i < nLen; i++) {
//实例化一个学生对象
Student s = new Student(names[i], courses[i], scores[i]); //1
total += s.getScore();
}
}
return total;
}
}
在代码1中,我们定义了一个Student类,该类中包括了三个成员,为客户端提供了计算多位学生的总成绩功能totalScore函数。在该函数中存在一个循环语句用于遍历每位学生的成绩并进行叠加。在每次循环的时候都会创建一个Student对象,如果学生数量为N,那么就会创建N个对象,并且这些对象一旦被创建后,脱离循环后就不会被使用。我们可以想象JVM耗费了内存和时间创建出来的对象没有怎么被“发扬光大”就这样“默默无闻”的被回收了,想想都觉得很是可惜。
的确是很可惜,对于上述业务场景,我们可以采用“对象复用”技术,减少创建对象数量,提高对象利用率,进而提升程序性能,如代码2所示。
2
public class Student {
private String name;
private String course;
private double score;
public Student(){}
public Student(String name, String course, double score) {
this.name = name;
this.course = course;
this.score = score;
}
public double getScore() {
return this.score;
}
//为对象的所有成员重新赋值
public void reInit(String n,String c,double s){
this.name = n;
this.course = c;
this.score = s;
}
//计算学生总成绩
public double totalScore(String[] names, String[] courses, double[] scores) {
int nLen = (null == names) ? 0 : names.length;
int cLen = (null == courses) ? 0 : courses.length;
int sLen = (null == scores) ? 0 : scores.length;
double total = 0;
Student s = new Student();
if (nLen == cLen && cLen == sLen) {
for (int i = 0; i < nLen; i++) {
//在循环体内不断的复用对象引用s而不再实例化新的学生对象
s.reInit(names[i], courses[i], scores[i]); //2
total += s.getScore();
}
}
return total;
}
}
如代码2所示,“对象复用”的实现方式,就是把已定义好的对象进行复用,具体复用的方式如上述代码中的reInit函数所示,需要将待复用的对象的所有或必要的成员变量进行重新初始化,这样内存空间不变、地址不变、只是内存中存放的内容发生了变化,对业务而言好像是重新变成了另外一个对象一样。
private String name;
private String course;
private double score;
public Student(){}
public Student(String name, String course, double score) {
this.name = name;
this.course = course;
this.score = score;
}
public double getScore() {
return this.score;
}
//计算学生总成绩
public double totalScore(String[] names, String[] courses, double[] scores) {
int nLen = (null == names) ? 0 : names.length;
int cLen = (null == courses) ? 0 : courses.length;
int sLen = (null == scores) ? 0 : scores.length;
double total = 0;
if (nLen == cLen && cLen == sLen) {
for (int i = 0; i < nLen; i++) {
//实例化一个学生对象
Student s = new Student(names[i], courses[i], scores[i]); //1
total += s.getScore();
}
}
return total;
}
}
在代码1中,我们定义了一个Student类,该类中包括了三个成员,为客户端提供了计算多位学生的总成绩功能totalScore函数。在该函数中存在一个循环语句用于遍历每位学生的成绩并进行叠加。在每次循环的时候都会创建一个Student对象,如果学生数量为N,那么就会创建N个对象,并且这些对象一旦被创建后,脱离循环后就不会被使用。我们可以想象JVM耗费了内存和时间创建出来的对象没有怎么被“发扬光大”就这样“默默无闻”的被回收了,想想都觉得很是可惜。
的确是很可惜,对于上述业务场景,我们可以采用“对象复用”技术,减少创建对象数量,提高对象利用率,进而提升程序性能,如代码2所示。
2
public class Student {
private String name;
private String course;
private double score;
public Student(){}
public Student(String name, String course, double score) {
this.name = name;
this.course = course;
this.score = score;
}
public double getScore() {
return this.score;
}
//为对象的所有成员重新赋值
public void reInit(String n,String c,double s){
this.name = n;
this.course = c;
this.score = s;
}
//计算学生总成绩
public double totalScore(String[] names, String[] courses, double[] scores) {
int nLen = (null == names) ? 0 : names.length;
int cLen = (null == courses) ? 0 : courses.length;
int sLen = (null == scores) ? 0 : scores.length;
double total = 0;
Student s = new Student();
if (nLen == cLen && cLen == sLen) {
for (int i = 0; i < nLen; i++) {
//在循环体内不断的复用对象引用s而不再实例化新的学生对象
s.reInit(names[i], courses[i], scores[i]); //2
total += s.getScore();
}
}
return total;
}
}
如代码2所示,“对象复用”的实现方式,就是把已定义好的对象进行复用,具体复用的方式如上述代码中的reInit函数所示,需要将待复用的对象的所有或必要的成员变量进行重新初始化,这样内存空间不变、地址不变、只是内存中存放的内容发生了变化,对业务而言好像是重新变成了另外一个对象一样。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1556方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2015前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3460info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2225import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 486https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 676public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 602https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 664https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 432https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5271 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3093微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 610https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1840什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 957本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1354原创: Hollis Hollis 负载 ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 665在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 931-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 764一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1901介绍个不错的RESTFUL MOCK的工具wiremock,地 ... -
LINUX下EPOLL等不错的文章收藏
2018-04-25 09:35 5531 通俗讲解 异步,非阻塞和 IO 复用 https:/ ...
相关推荐
"设计模式可复用面向对象软件的基础"这一主题强调了设计模式在创建可维护、可扩展的面向对象软件中的核心作用。源码实现则为我们提供了实际应用这些模式的实例,帮助我们更好地理解和掌握它们。 在《设计模式:可...
标题《分析模式-可复用的对象模型》以及描述中提到的软件系统设计、责任模式、观察和测量模式、公司财务观察模式、库存与账务、使用财务模式、计划、交易、派生合同、交易包等,均指向了软件工程中的设计模式和面向...
本书结合设计实例从面向对象的设计中精选23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...
### 设计模式——可复用的面向对象设计方法 #### 引言 设计面向对象软件是一项挑战性工作,尤其在确保软件具备良好的可复用性时更是如此。要实现这一目标,开发人员需要准确识别出相关对象,并以合适的粒度对其...
这些模式经过时间的考验,被广泛应用于各种面向对象的软件开发中,以提高代码的可读性、可维护性和可复用性。本教程旨在深入讲解设计模式的基本原理和应用方法,帮助开发者构建更加健壮和灵活的软件系统。 首先,...
《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位顶尖的面向对象领域专家精心 选取了最具价值的设计实践,加以分类整理和命名,并用简洁而...
在面向对象编程中,设计模式提供了一种标准化的方法来处理常见的设计问题,从而提高代码的可读性、可维护性和复用性。本书《设计模式可复用面向对象软件的基础(C++)》是针对这一主题的深度探讨,特别适合C++开发者...
### 设计模式——可复用面向对象软件的基础 #### 核心知识点概览 《设计模式可复用面向对象软件的基础》一书是面向对象设计领域的重要著作,它聚焦于如何构建可复用的面向对象软件,特别是针对C++语言环境下的设计...
《分析模式:可复用的对象模型(Analysis.Patterns:Reusable.Object.Models)》是一本深入探讨软件设计中可复用对象模型的重要著作。该书结合了中英文内容,为读者提供了全面的理解和应用分析模式的资源。书中主要关注...
《设计模式:可复用面向对象软件的基础》是一本经典的软件工程著作,它详细阐述了在面向对象编程中,如何通过使用预定义的解决方案模板来解决常见问题,从而提高代码的可读性、可维护性和复用性。设计模式是经验丰富...
在"可复用面向对象软件的基础"这一主题中,我们探讨的核心是如何通过设计原则、模式和技术来创建可复用的软件组件。 **面向对象的四大特性** 1. **封装**:封装是将数据和操作这些数据的方法绑定在一起的过程,...
设计模式 - 可复用面向对象软件的基础(高清版PDF)设计模式可复用面向对象软件的基础高清版
《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位面向对象领域专家精心选取了具价值的设计实践,加以分类整理和命名,并用简洁而易于重用...
**JSP内置对象及JSP复用** 在JavaServer Pages(JSP)技术中,内置对象是预定义的、可以直接在页面中使用的对象,无需通过`<jsp:useBean>`标签或者`new`关键字来创建。这些内置对象极大地简化了JSP页面的编程,提供...
"分析模式可复用的对象模型"这一主题着重于如何构建能够跨越不同项目和应用的通用对象模型。 在面向对象设计中,对象模型是系统的核心,它代表了现实世界中的实体以及它们之间的关系。通过使用分析模式,我们可以...
该文件名为《分析模式——可复用的对象模型》,是一部探讨如何通过设计模式建立可复用对象模型的专业著作。书中内容针对程序开发人员,尤其是对在程序开发中应用设计模式及构建可复用对象模型有深厚兴趣的专业人士。...
一本关于设计模式的书,它描述了在面向对象软件设计过程中针对特定...所有的模式均可以用标准的面向对象语言实现,这也许有时会比特殊的解法多费一些功夫,但是为了增加软件的灵活性和可复用性,多做些工作是值得的。