`

(转)对象复用

 
阅读更多
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函数所示,需要将待复用的对象的所有或必要的成员变量进行重新初始化,这样内存空间不变、地址不变、只是内存中存放的内容发生了变化,对业务而言好像是重新变成了另外一个对象一样。
分享到:
评论

相关推荐

    设计模式可复用面向对象软件的基础 源码

    "设计模式可复用面向对象软件的基础"这一主题强调了设计模式在创建可维护、可扩展的面向对象软件中的核心作用。源码实现则为我们提供了实际应用这些模式的实例,帮助我们更好地理解和掌握它们。 在《设计模式:可...

    分析模式-可复用的对象模型

    标题《分析模式-可复用的对象模型》以及描述中提到的软件系统设计、责任模式、观察和测量模式、公司财务观察模式、库存与账务、使用财务模式、计划、交易、派生合同、交易包等,均指向了软件工程中的设计模式和面向...

    《设计模式:可复用面向对象软件的基础》_设计模式:可复用面向对象软件的基础_

    本书结合设计实例从面向对象的设计中精选23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    设计模式:可复用面向对象软件的基础--详细书签版

     本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...

    设计模式--可复用的面向对象设计方法

    ### 设计模式——可复用的面向对象设计方法 #### 引言 设计面向对象软件是一项挑战性工作,尤其在确保软件具备良好的可复用性时更是如此。要实现这一目标,开发人员需要准确识别出相关对象,并以合适的粒度对其...

    设计模式:可复用面向对象软件的基础.zip

    这些模式经过时间的考验,被广泛应用于各种面向对象的软件开发中,以提高代码的可读性、可维护性和可复用性。本教程旨在深入讲解设计模式的基本原理和应用方法,帮助开发者构建更加健壮和灵活的软件系统。 首先,...

    设计模式:可复用面向对象软件的基础 书和源码

    《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位顶尖的面向对象领域专家精心 选取了最具价值的设计实践,加以分类整理和命名,并用简洁而...

    设计模式:可复用面向对象软件的基础(非扫描版+高清)

    《设计模式:可复用面向对象软件的基础》是一本经典的软件工程著作,它详细阐述了在面向对象编程中,如何通过使用预定义的解决方案模板来解决常见问题,从而提高代码的可读性、可维护性和复用性。设计模式是经验丰富...

    设计模式可复用面向对象软件的基础(C++)——强烈推荐

    在面向对象编程中,设计模式提供了一种标准化的方法来处理常见的设计问题,从而提高代码的可读性、可维护性和复用性。本书《设计模式可复用面向对象软件的基础(C++)》是针对这一主题的深度探讨,特别适合C++开发者...

    设计模式可复用面向对象软件的基础(c++).pdf

    ### 设计模式——可复用面向对象软件的基础 #### 核心知识点概览 《设计模式可复用面向对象软件的基础》一书是面向对象设计领域的重要著作,它聚焦于如何构建可复用的面向对象软件,特别是针对C++语言环境下的设计...

    分析模式:可复用的对象模型(Analysis.Patterns:Reusable.Object.Models)(中英版)

    《分析模式:可复用的对象模型(Analysis.Patterns:Reusable.Object.Models)》是一本深入探讨软件设计中可复用对象模型的重要著作。该书结合了中英文内容,为读者提供了全面的理解和应用分析模式的资源。书中主要关注...

    分析模式可复用的对象模型

    "分析模式可复用的对象模型"这一主题着重于如何构建能够跨越不同项目和应用的通用对象模型。 在面向对象设计中,对象模型是系统的核心,它代表了现实世界中的实体以及它们之间的关系。通过使用分析模式,我们可以...

    可复用面向对象软件的基础 PDF

    在"可复用面向对象软件的基础"这一主题中,我们探讨的核心是如何通过设计原则、模式和技术来创建可复用的软件组件。 **面向对象的四大特性** 1. **封装**:封装是将数据和操作这些数据的方法绑定在一起的过程,...

    设计模式 - 可复用面向对象软件的基础(高清版PDF)

    设计模式 - 可复用面向对象软件的基础(高清版PDF)设计模式可复用面向对象软件的基础高清版

    设计模式:可复用面向对象软件的基础.[美]Erich Gamma(带详细书签)

    《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位面向对象领域专家精心选取了具价值的设计实践,加以分类整理和命名,并用简洁而易于重用...

    jsp内置对象及jsp复用

    **JSP内置对象及JSP复用** 在JavaServer Pages(JSP)技术中,内置对象是预定义的、可以直接在页面中使用的对象,无需通过`&lt;jsp:useBean&gt;`标签或者`new`关键字来创建。这些内置对象极大地简化了JSP页面的编程,提供...

    分析模式——可复用的对象模型

    该文件名为《分析模式——可复用的对象模型》,是一部探讨如何通过设计模式建立可复用对象模型的专业著作。书中内容针对程序开发人员,尤其是对在程序开发中应用设计模式及构建可复用对象模型有深厚兴趣的专业人士。...

    《设计模式:可复用面向对象软件的基础》 中文高清版

    设计模式:可复用面向对象软件的基础 中文高清版。此书是一本必看的设计模式书籍,书中实例采用c++实现。

Global site tag (gtag.js) - Google Analytics