深轉殖和淺轉殖 原型模式

2022-06-25 23:03:20 字數 1661 閱讀 8534

標籤(空格分隔): 設計模式

原型模式: 將乙個物件作為原型, 通過對其進行複製而轉殖出多個和原型類似的新例項.

淺轉殖: 被複製物件的所有基本變數都含有和原來變數完全相同的值, 而其他所有的引用物件任然指向原來的物件. 換言之, 淺轉殖僅僅複製鎖考慮的物件, 而不複製它所引用的物件. 轉殖的深度僅僅到棧記憶體中.

深轉殖: 和淺轉殖不一樣的點在於其重寫了clone函式. 在轉殖本身物件的時候, 也對其中的引用型別的屬性進行轉殖.

package rebegin;

public class clonedemo

}/**

* 淺轉殖, 只會轉殖 僅僅拷貝物件本身, 也就是拷貝的深度僅限於棧記憶體.

*/class weaktestclone implements cloneable

weaktestclone(int age, string name, gg gg)

public int getage()

public void setage(int age)

public string getname()

public void setname(string name)

public gg getgg()

public void setgg(gg gg)

@override

protected object clone() throws clonenotsupportedexception

@override

public string tostring() '; }}

class strongtestclone implements cloneable

public strongtestclone(int age, string name, gg gg)

public int getage()

public void setage(int age)

public string getname()

public void setname(string name)

public gg getgg()

public void setgg(gg gg)

@override

public string tostring() ';

} @override

protected object clone() throws clonenotsupportedexception

}class gg implements cloneable

gg(int age)

public int getage()

public void setage(int age)

@override

protected object clone() throws clonenotsupportedexception

}

testclone

testclone

strongtestclone

strongtestclone

轉殖,深轉殖和淺轉殖

轉殖,深轉殖和淺轉殖。1.實現轉殖,繼承cloneable介面,實現clone beanutils.clonebean origin 2.深轉殖和淺轉殖的區別,淺轉殖指的是轉殖的時候僅僅轉殖物件本身 物件的基本變數 而不拷貝物件的引用變數。深轉殖指的是轉殖的時候不僅轉殖物件本身,而且拷貝物件包含的引...

深轉殖和淺轉殖

為什麼需要轉殖?new出來的物件中的屬性都是初始化時候的值,當需要乙個新的物件來儲存當前物件的 狀態 就靠clone方法了。直接使用object a new object object b b a不行嗎,答案是不行的。因為這只是轉殖了引用。如何實現轉殖?首先由兩種轉殖的方式,乙個是深轉殖,乙個是淺轉...

淺轉殖和深轉殖

1淺轉殖 shallow copy 是通過呼叫object的clone方法,建立出和原物件 結構相同的新物件。淺轉殖 和深轉殖 deep copy 不同,如果被拷貝的物件屬性為可變類,則直接複製該引用物件的位址。這會導致,淺轉殖出來的物件 如果改變可變類屬性值,則原物件的可變類屬性值也會一起變。換句...