曬曬clone 方法

2021-08-23 11:43:27 字數 1078 閱讀 6808

先看乙個原型(prototype)模式的例子:

定義:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件.

這個是乙個使用勺子的方法:

package com.sui.prototype;

public class saladspoon extends abstractspoon

}

這個是乙個使用勺子的另乙個方法:

package com.sui.prototype;

public class soupspoon extends abstractspoon

}

執行下面這個類:

package com.sui.prototype;

public class abstractspoon implements cloneable

public void setspoonname(string spoonname)

public object clone() catch (clonenotsupportedexception e)

return object;

}public static void main(string args)

}

最後輸出:

soup spoon

salad spoon

很容易發現這段**和我們經常使用的多了乙個clone()方法,可以這麼說原型模式是clone()方法的"獨場秀".有一點值得注意的是:去掉clone()方法.程式照常執行.這樣就有疑問了:clone()方法是否值得使用?

另乙個需要注意的是clone()方法在原型模式中的作用其實就是在處理"值傳遞"和"引用傳遞"兩者不同結果上的.

在反覆實驗之後覺得clone()方法很難"恭維".

想請教諸位:

其一:是否有更好的方法來實現:使用乙個物件再建立另外乙個可定製的物件.即給原型模式脫胎換骨;

其二:在處理"值傳遞"和"引用傳遞"問題上是否有更簡便的方法;

其三:clone()方法到底有多大利用價值?

魔術方法 clone

clone 轉殖物件的時候自動呼叫。測試 如下 class wo w1 new wo 建立乙個新的物件 echo w1 username.輸出它的姓名 w1 say echo c1 w1 通過引用賦值,其實它們公用乙個位址,c1和w1只是相當於它的兩個不同的名字 echo c1 username.c...

如何支援clone方法

1 實現cloneable介面,因為object的clone方法將檢查類是否實現了cloneable介面,如果沒有將丟擲異常clonenotsupportedexception物件。cloneable介面沒有任何方法,只是個標誌,所以只需要簡單得寫上implements cloneable即可。2 ...

拷貝(clone)方法集合

淺拷貝,拷貝可列舉屬性 使用這種技術將會忽略原型鏈。此外,巢狀物件並不會被轉殖,只是複製了他們的引用,因此淺拷貝後巢狀物件和原始物件仍然指向同乙個物件。let a b console.log b 可用於深度轉殖乙個簡單的物件,但他是 cpu 密集型的且只允許接受有效的 json。因此不適用於含有函式...