返回

Java编程思想

关灯
护眼
第37章(1 / 11)
强烈推荐: 宇宙、生命及一切 献给谈教授的信 王之前世今生 柔宠妹妹 《大学艳史》(全本+后记)作者:江涛 爱欲无悔 门房秦大爷的故事(精品) 鼠疫 帅爆全红楼的族长

修改的类的特定合作者之ใ间。它可以被&,软件开

jdk14中记录日志api,所以,用来引导自己。那就无需计划得精心详尽,

狗屋,对于某个对象。其所有syn9i,也就是一个jar文件,它里面包含了beaທn的所有class文件以及能表

publi9extendsjaທpplet{

"hello!ำ

}

}

写任何特殊代码。当你在对象上调用其任意syn9ized方法的时候,此对象都被加

结束并释放了锁之后,才能调用g。不过,来演示baທngbean2的多&#x,

准的bຘean容器,那么应将其标记成transient。但是这之后,它比对象序列ต化更接近于持久化,我们还必须ี要设计一种安全的保,因为它可以自动存储

syste摸utprintlns;

}

}

publicນstaticvoidtestlista{

importuceeckelsimpletest;

privatestati9e9test;

}

要求添加新类型的宠物,只需简单地改变pettypes数组即可;

voidf{

interfa99im{

interfa9๗fly{

th&#:而毋需改动程序其他的部ຖ

定义可能看起来像这样。如果你在构建一个大型的、复杂的程序,那么没有什么比在程序某处暗藏了一个错

大型程序设计

激它们的创建者。9为我解决了无数9indo9s不能解

开过程必不可少的部分,现在我已经无法再返回不用它们的时代了。我现在甚至已经变得

起初ม,java被设计成为一种控制硬件设备的语言,根本没考虑到inter。现在,javaທ

作为通用性编程语言,程序员需要具备克隆对象的能力。因此,9๗e被添加到根类

object中,原本声明为publicນ方法,这样你就能ม复制任意对象。这似乎是最方便的解决

方案,但是之后呢,它会有什么危害吗?

是的,当java被视为终极的inter编程语言时,情况就变了。安全问题突显了出来,

当然,这都是使用对象所带来的问题๤,因为你必定不愿意任何人都能克隆你的机密对象。

所以你现在看到的设计,是在最初简单而直接的设计上,做了许多修补之后的版本:object

中的9๗e被声明为ฦprote9eable接口、并做异常处理。

值得注意的是,只有真正需要调用obຘje9๗eable

接口,因为在运行期会检查你的类是否实现了9eable接口。不过,为了使具备克隆能

力的对象保持一致性毕竟9๗eable是空的,即使不调用obຘje9e方法,

你仍然应该实现此接口。

控制ๆ克隆能力

为了移除克隆能力,你也许会建议将9e方法声明为privaທte。但是这行不通,因为对

于基类的方法,无法在子类中ณ削弱其访问能力。然而,我们必须有能力控制某个ฐ对象是否

可以被克隆。对此你可能会有以下态度:

1不关心。你并不做任何克隆操作,即使你的类不可克隆,但是只要愿意,就

能向其子类添加克隆能力。这只有在缺省的obje9e能ม够合理地处理

类中所有属性时才起作用。

2支持9eaທble接口、重载9e方แ法。

在重载的9e,并捕获所有异常所以你重载的

9e不会抛出异常。

3有条件地支持克隆。如果你的类例如容器类包含其他对象的引用,它们

不一定是可克隆的,但你的9e方法应该试着克隆它们,如果抛出异常,

只需将异常传给程序员。例如,考虑一种特殊的arraylist,它需要克隆自己

包含的所有对象。编写这样的arraylist时,你并不知道客户端程序员会向

你的arraylist存入何种类型的对象,因此你也不知道它们能否被克隆。

4不实现9eaທble接口,但是以prote9e方法,为所有

属性创建正确的复制行为。于是该类的任何子类,都可以重载9๗e并调用

super9๗e产生正确的复制ๆ行为。注意,你的9e可以并且应该

调用super9e预期的是个ฐ9eabຘle对象否

则ท会抛出异常。没人会直接对你的类的对象调用9e,只能通过其子类

才行,而要想让它正常工作,其子类必须实现9eabຘle接口。

5不实现9๗e使之抛出异常,以阻止克隆操作。只

有此类的所有子类,都在各自的9๗e,这种阻止克

隆的方แ法才起作用。否则,程序员还是有可能绕开它。

6将你的类声明为final以阻止克隆。如果它的任何父类祖先类都没有重载

9e,那ว么此方法就行不通了。如果父类重载了9๗e,那么เ让你的类

再次重载9otsupportedex9。将类声明为

final,是唯一有保证的防止克隆的方แ法。此外,当处理机密对象,或需要控

制对象的数量时,应该将所有构造器都设置为private,然后一个或多

个创建对象的专用方แ法。这些方法可以限制创建对象的数量和条件。对此

有一个特别的例子:singleton模式。可以从uceeckel上的

《thinkinginpatterns9ithjaທva》中找到。

下面的例子演示了各种方法,以实现克隆能力,然后“关闭”继承体系下层子类的克隆能力:

:appendixa:๘9eaທblejava

9gto色eifareferen9ed

importuceecນkelsimpletest;

9ethisbe9'toverride9e:

9ary{}

overrides9'ูtimplement9eable:

9dsordinary{

pubຘli9ethro9s9otsupportedex9

书签 上一章 目录 下一章 书架s
推荐阅读: 清韵小尸八珍玉食 专业投机原理pdf 嫡妻不好惹素衣渡江百度云下载 豪门大亨 百度网盘 云别传原文 御司廷姜卿卿帝国总裁倒插门三线女星 修仙之超级商人 凡人修仙传五行灵根 圣诞快车是在谁的直接关怀下产生的 超级军功系统txt小说下载