java高效编程.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java高效编程

Java高效编程 创建及销毁对象 + - 考虑用静态工厂方法替代构造函数 静态工厂方法的优势 静态工厂方法的一个优势是,它们具有自己的名字。构造函数的参数自身无法描述被返回的对象,而选用名字合适的静态工厂方法可以使类的使用更加容易,产生的客户代码更容易阅读。 静态工厂方法的第二个优势是它们不需要在每次调用时都去创建一个新的对象。这使得非可变类可以使用预先构造的实例,或者在构造阶段先缓存这些实例,然后重复使用它们,从而避免创建不必要的重复对象。 静态工厂方法为重复调用而返回同一对象的能力,可以用来控制某一时刻实例的存在情况。 有两个理由使静态方法可以做到这一点。 首先它能够使类保证实例是singleton。 其次,它能够使非可变类保证没有两个相等的实例同时存在。 静态工厂的第三个优势是它们可以返回到返回类型的任何子类型(subtype)对象。这使用户在选择返回对象的类时具有很大的灵活性。 静态工厂的缺陷 静态工厂的主要缺陷是类在没有公共或受保护的构造函数时不能被子类化。例如,不可能子类化Collections Framework中的任何集合类。 静态工厂方法的另一个缺陷是名字之间不容易区分。 总地来说,如果你权衡过了这两种方法,同时没有其他因素影响你的选择取向,那么最好还是简单地使用构造函数,因为这符合规范。 + - 使用私有构造函数强化singleton属性 singleton类就是一种只能被实例化一次的简单类。 + - 实现singlton有两种途径,这两种途径都以保持构造函数私有及提供公共的静态成员允许客户访问它的唯一实例为基础。 一种实现方法是,公共的静态成员是一个final域: //singleton with final field public class Elvis { ??????????public static final Elvis INSTANCE = new Elvis(); ? ??????????private Elvis() { ?????????????????????... ??????????} ? ??????????... } 私有构造函数只被调用一次,以初始化公共的静态final域Elvis.INSTANCE。公共的或受保护的构造函数的缺乏,保证了一个“唯一的elvis”的世界:一旦Elvis类被初始化,仅有一个Elvis实例存在。 第一种方式的突出优点是类的成员的声明使类清楚地表明它是singleton:公共的静态域是final,所以这个域将总是包含着相同的对象引用。 第二种方法中,提供了公共的静态工厂方法,取代了公共的静态final域: //singleton with static factory public class Elvis { ??????????private static final Elvis INSTANCE = new Elvis(); ? ??????????private Elvis() { ?????????????????????... ??????????} ??????????public static Elvis getInstance() { ?????????????????????return INSTANCE; ??????????} } 对所有的静态方法Elvis.getInstance的调用,都返回同一个对象的引用,没有其他的Elvis实例被创建。 第二种方式的突出优点在于它给使用者提供了灵活性,当你决定把这个类改变为非singleton的时候,无需修改API。 总而言之,如果你确信该类将永远是singleton的,那么应该使用第一种方法。反之,第二种方式是更好的选择。 + - 用私有构造函数强化不可实例化能力 有些类不希望被实例化,对它们实例化也没有意义。 试图通过将类抽象化来强化类的不可实例化能力是行不通的。这是因为类可以被子类化,而子类可以被实例化。这种做法还会误导用户,以为这种类的目的是为了实现继承的。 有一种简单的方法可以解决这一问题。由于缺省的构造函数仅在类不包含显示的构造函数时才会生成,我们可以在类中包含显式的私有类型构造函数来实现类的不可实例化特性。 因为声明的构造函数是私有的,所以它在类的外部不可访问。假设构造函数不会被类自身从内部调用,即能保证类永远不会被实例化。 例: class F { ???????private F() { ???????????????... ???????} ???????... } + - 避免创建重复对象 重用同一对象比每次都创建功能等同的新对象通常更适合。重用方式既快速

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档