不變模式:
不變模式可以增強(qiáng)對(duì)象的強(qiáng)壯性,不變模式準(zhǔn)許多個(gè)對(duì)象共享一個(gè)對(duì)象,這降低了對(duì)該對(duì)象進(jìn)行并發(fā)訪問(wèn)時(shí)的同步化開(kāi)銷(xiāo)。如果要修改一個(gè)不變對(duì)象的狀態(tài),則需要?jiǎng)?chuàng)建一個(gè)新的對(duì)象,并將其存入新的對(duì)象里。不變模式只涉及到一個(gè)類(lèi),一個(gè)類(lèi)的內(nèi)部狀態(tài)一旦被創(chuàng)建以后,在整個(gè)期間都不會(huì)發(fā)生變化。他有兩種一種是強(qiáng)不變模式和弱不變模式。
弱不變模式:
首先滿(mǎn)足沒(méi)有方法可以改變對(duì)象的狀態(tài),則對(duì)象一旦被創(chuàng)建之后,對(duì)象的狀態(tài)就不會(huì)改變。二該對(duì)象的所有的屬性都是私有的,并且不準(zhǔn)許聲明任何公有的方法來(lái)改變他們。三這個(gè)對(duì)象所引用的對(duì)象也應(yīng)該是不變的對(duì)象,如果在初始化時(shí)應(yīng)用了一個(gè)可變的對(duì)象,則應(yīng)該對(duì)該可變對(duì)象進(jìn)行復(fù)制一份,而不要使用原來(lái)的拷貝。這種模式的缺點(diǎn)是他可以用子類(lèi),并且子類(lèi)可以是可變的對(duì)象??勺兊淖宇?lèi)可能一修改父類(lèi)對(duì)象的狀態(tài),從而可能會(huì)允許外界修改父對(duì)象的狀態(tài)。
問(wèn)題:
為什么說(shuō)可變的對(duì)象可以修該父類(lèi)對(duì)象的狀態(tài)呢?怎樣做?
強(qiáng)不變模式首先要滿(mǎn)足弱不變模式,然后將這個(gè)類(lèi)聲明成final類(lèi),則它變不可能有子類(lèi)了,并且也將該對(duì)象所考慮到的所有方法聲明為final。
不變模式與享元模式有很大的相同處,他們的對(duì)象狀態(tài)都有要求不隨環(huán)境的變化而變化,不過(guò)享元模式的內(nèi)涵狀態(tài)在不影響享元對(duì)象的共享時(shí),可以為可變的。不變模式對(duì)對(duì)象的要求要比享元模式對(duì)對(duì)象的要求更嚴(yán)格。