先看乙個原型(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。因此不適用於含有函式...