GOF23設計模式 原型模式(深轉殖)

2021-08-23 14:44:49 字數 2988 閱讀 3712

/**

* 測試物件

* *@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...