2012年5月28日
摘要: 试比较以下两行代码在被多次反复执行时的效率差异:由于String被实现为不可变对象,JVM底层将其实现为常量池,既所有值等于"stringette" 的String对象实例共享同一对象地址,而且还可以保证,对于所有在同一JVM中运行的代码,只要他们包含相同的字符串字面常量,该对象就会被重用。我们继续比较下面的例子,并测试他们在运行时的效率差异:[java] view plaincopyBooleanb=Boolean.valueOf("true");Booleanb=newBoolean("true");前者通过静态工厂方法保证了每次 阅读全文
posted @ 2012-05-28 15:02 springside例子 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 有一些工具类(utility class)不希望被实例化,实例对它没有任何意义。然而,在缺少显式构造器的情况下,编译器会自动提供一个公有的、无参的缺省构造器(default constructor),对于用户而言,这个构造器与其他的构造器没有任何区别。在已发行的API中常常可以看到一些被无意识实例化的类。企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类也可以被实例化。这样做甚至会误导用户,以为这种类是专门为了继承而设计的。然后,有一些简单的习惯用法可以确保类不可被实例化。我们只要让这个类包含私有构造器,它就不能被实例化了:[java] view plai 阅读全文
posted @ 2012-05-28 15:01 springside例子 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 对于单实例模式,相信很多开发者并不陌生,然而如何更好更安全的创建单实例对象还是需要一些推敲和斟酌的,在Java中主要的创建方式有以下三种,我们分别作出解释和适当的比较。1. 将构造函数私有化,直接通过静态公有的final域字段获取单实例对象:[java] view plaincopypublicclassElvis{publicstaticfinalElvisINSTANCE=newElvis();privateElivs(){...}publicvoidleaveTheBuilding(){...}}这样的方式主要优势在于简洁高效,使用者很快就能判定当前类为单实例类,在调用时直接操作Eliv 阅读全文
posted @ 2012-05-28 15:00 springside例子 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。考虑用一个类表示包装食品外面显示的营养成分标签。这些标签中有几个域是必须的:每份的含量、每罐的含量以及每份的卡路里,还有超过20个可选域:总脂肪量、饱和脂肪量、转化脂肪、胆固醇、钠等等。大多数产品在某几个可选域中都会有非零的值。对于这样的类,应该用哪种构造器或者静态方法来编写呢?1. 重叠构造器模式[java] view plaincopy//Telescopingconstructorpattern-doesnotscalewell!publicclassNutritionFacts{privatefinalintser 阅读全文
posted @ 2012-05-28 14:59 springside例子 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 对于类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个公有的构造器。类也可以提供一个公有的静态工厂方法,它只是一个返回类的实例的静态方法。下面是一个来自Boolean的简单示例。[java] view plaincopypublicstaticBooleanvalueOf(booleanb){returnb?Boolean.TRUE:Boolean.False;}静态工厂方法与构造器不同的第一大优势在于,它们有名称。静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对 阅读全文
posted @ 2012-05-28 14:03 springside例子 阅读(155) 评论(0) 推荐(0) 编辑
摘要: *观察者模式:定义了对象之间的一对多依赖关系,当一个对象(主题对象)的状态改变时,它的所有依赖者(观察者对象)都会收到通知并自动更新。*观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需修改主题对象的代码,只需要新的观察者对象实现接口。在程序运行的过程中,可以随时注册和删除观察者而不影响主体对象。*观察者模式使主题(Subject)对象和观察者(Observer)对象都可以被轻易地复用。软件设计原则:努力在交互对象之间实现松耦合,使它们之间的互相依赖降到最低,从而提高可复用性。*Java内置了对观察者模式的支持:java.util.Observable类和java.uti 阅读全文
posted @ 2012-05-28 13:28 springside例子 阅读(233) 评论(0) 推荐(0) 编辑