/**
* 測試物件
* *@author administrator
* */
public
class
name
implements
cloneable, serializable
public
void
setname(string name)
public name clone() catch (clonenotsupportedexception e)
}}
/**
* 深轉殖
* *@author administrator
* */
public
class
productbydeepclone
implements
cloneable, serializable
public string getid()
public
void
setid(string id)
public name getname()
public
void
setname(name name)
public string getpart()
public
void
setpart(string part)
/*** 深轉殖
*/public productbydeepclone clone() catch (clonenotsupportedexception e)
}}
/**
* 深轉殖測試
* * @author administrator
* */
public class clientbydeepclone ;
productbydeepclone p1 = new productbydeepclone(id, name, part);
system.out
.println("首次賦值");
system.out
.println(p1);
system.out
.println(p1.getid());
system.out
.println(p1.getname().getname());
system.out
.println(p1.getpart()[0]);
system.out
.println();
// 轉殖
system.out
.println("轉殖後的值");
productbydeepclone p2 = (productbydeepclone) p1.clone();
system.out
.println(p2);
system.out
.println(p2.getid());
system.out
.println(p2.getname().getname());
system.out
.println(p2.getpart()[0]);
system.out
.println();
id = "2"
; name.setname("name2");
part[0] = "part21"
; // 給原物件重新賦值後原先的物件的值
system.out
.println("給原物件重新賦值後原先的物件的值");
system.out
.println(p1);
system.out
.println(p1.getid());
system.out
.println(p1.getname().getname());
system.out
.println(p1.getpart()[0]);
system.out
.println();
system.out
.println("給原物件重新賦值後新的物件的值");
system.out
.println(p2);
system.out
.println(p2.getid());
system.out
.println(p2.getname().getname());
system.out
.println(p2.getpart()[0]);
system.out
.println();
}}
測試結果:
首次賦值
com.suntefan
.model
.prototype
.productbydeepclone
@7852e922
1name1
part1
轉殖後的值
com.suntefan
.model
.prototype
.productbydeepclone
@4e25154f
1name1
part1
給原物件重新賦值後原先的物件的值
com.suntefan
.model
.prototype
.productbydeepclone
@7852e922
1name2
part21
給原物件重新賦值後新的物件的值
com.suntefan
.model
.prototype
.productbydeepclone
@4e25154f
1name1
part1
GoF23 原型模式
以轉殖羊為例,對比輸出原型和轉殖物件的位址與值的差異 1.新建羊類實現cloneable介面並重寫object中的clone方法,自帶名稱和生日屬性,提供set和get方法。實現轉殖介面並重寫object的clone方法 author wangyds date 2019 5 20 22 10 pub...
GOF23 原型模式
淺拷貝 具體 實現 public class sheep implements cloneable public string getname public void setname string name public intgetage public void setage int age pu...
GoF23 原型(Prototype)模式
目標之一 提高程式的可復用性 有哪些功能可以被擴充套件?擴充套件功能時必須修改哪些地方?有哪些類不需要修改?原型模式 用乙個已經建立的例項作為原型,通過複製該原型來建立乙個相似的物件。public class song implements cloneable public void setname...