糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 尚学堂java学习笔记:单子

尚学堂java学习笔记:单子

时间:2020-01-31 23:02:17

相关推荐

尚学堂java学习笔记:单子

创建单子的关键就是防止客户程序员采用除由我们提供的之外的任何一种方式来创建一个对象。必须将所有构建器都设为private(私有),而且至少要创建一个构建器,以防止编译器帮我们自动同步一个默认构建器(它会自做聪明地创建成为“友好的”——friendly,而非private)。

此时应决定如何创建自己的对象。在这儿,我们选择了静态创建的方式。但亦可选择等候客户程序员发出一个创建请求,然后根据他们的要求动态创建。不管在哪种情况下,对象都应该保存为“私有”属性。我们通过公用方法提供访问途径。在这里,getHandle()会产生指向Singleton 的一个句柄。剩下的接口(getValue()和setValue())属于普通的类接口。

Java 也允许通过克隆(Clone)方式来创建一个对象。在这个例子中,将类设为final 可禁止克隆的发生。由于Singleton 是从Object 直接继承的,所以clone()方法会保持protected(受保护)属性,不能够使用它(强行使用会造成编译期错误)。然而,假如我们是从一个类结构中继承,那个结构已经过载了clone()方法,使其具有public 属性,并实现了Cloneable,那么为了禁止克隆,需要过载clone(),并掷出一个CloneNotSupportedException(不支持克隆违例),就象第12 章介绍的那样。亦可过载clone(),并简单地返回this。那样做会造成一定的混淆,因为客户程序员可能错误地认为对象尚未克隆,仍然操纵的是原来的那个。

注意我们并不限于只能创建一个对象。亦可利用该技术创建一个有限的对象池。但在那种情况下,可能需要解决池内对象的共享问题。如果不幸真的遇到这个问题,可以自己设计一套方案,实现共享对象的登记与撤消登记。

如果觉得《尚学堂java学习笔记:单子》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。