什么是Defensive Copy
生活随笔
收集整理的這篇文章主要介紹了
什么是Defensive Copy
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
什么是防御性拷貝呢(defensive copy)?
先說說可變對象和不可變對象。可變對象就是在對象構(gòu)造完成之后內(nèi)部構(gòu)造會(huì)被改變的對象。
一個(gè)類可能包含一些方法,使得自己的內(nèi)部參數(shù)被改變,這樣調(diào)用者可以輕而易舉的破壞掉封裝,危害很大,這種時(shí)候就需要防御性拷貝。
?
通俗點(diǎn)講,防御性拷貝的關(guān)鍵就在于不把原本類中的對象提供給調(diào)用者,而是創(chuàng)建一個(gè)(也就是拷貝一個(gè))跟封裝的類中相同的對象返回給調(diào)用者,這樣,你對這個(gè)參數(shù)進(jìn)行修改的時(shí)候跟封裝類內(nèi)部的相關(guān)參數(shù)無關(guān),也就不會(huì)改變類中的參數(shù)。這就是防御性拷貝。
?
舉個(gè)例子,
public Name getName(){return name; }這種observer則會(huì)造成類中參數(shù)被改變的風(fēng)險(xiǎn)。
防御性拷貝如下:
public Name getName(){return new Name(name.toString()); }新建一個(gè)對象返回,這樣就可以保護(hù)類中的對象。這就是防御性拷貝。
總結(jié)
以上是生活随笔為你收集整理的什么是Defensive Copy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。