設計模式之原型模式學習

2021-10-03 11:14:18 字數 2952 閱讀 2255

原型模式是一種建立型模式,它採取複製原型物件的方法來建立物件的例項。使用原型模式建立的例項,具有與原型一樣的資料。
1、由原型物件自身建立目標物件。也就是說,物件建立這一動作發自原型物件本身。

2、目標物件是原型物件的乙個轉殖。也就是說,通過原型模式建立的物件,不僅僅與原型物件具有相同的結構,還與原型物件具有相同的值。

3、根據物件轉殖深度層次的不同,有淺度轉殖與深度轉殖。

一、在建立物件的時候,我們不只是希望被建立的物件繼承基類的基本結構,還希望繼承原型物件的資料。

二、希望對目標物件的修改不影響既有的原型物件(深度轉殖的時候可以完全互不影響)。

三、隱藏轉殖操作的細節。很多時候,對物件本身的轉殖需要涉及到類本身的資料細節。

建立原型模式只需要實現cloneable。也就是說該類被宣告可以被轉殖

//實現介面

public

class

person

implements

cloneable

catch

(clonenotsupportedexception e)

}}

person person1 =

newperson()

; person1.

setname

("張三");

person1.

setage(25

);person1.

set***

("男");

list friends =

newarraylist

(); friends.

add(

"he");

friends.

add(

"jing");

friends.

add(

"feng");

friends.

add(

"lai");

person1.

setfriends

(friends)

;//person person2 = person1;這裡person2在記憶體中並沒建立乙個新的物件,只是引用指向了原有person

//轉殖原物件。這裡引用是指向的是在記憶體中重新建立的乙個物件,只是它的資料和原來的物件一樣。

person person2 = person1.

clone()

; person1.

setname

("zs");

//這裡修改person1物件的內容,不影響person2物件的內容

system.out.

println

(person1.

getname()

);//執行後結果 zs

system.out.

println

(person1.

getage()

);system.out.

println

(person1.

get***()

);system.out.

println

(person2.

getname()

);//執行後結果 張三

system.out.

println

(person2.

getage()

);system.out.

println

(person2.

get***()

);

執行後結果

上面都是淺度轉殖結果,引用型別的屬性需要深度處理。

例如:friends屬性,轉殖體只是轉殖了它的引用

//深度轉殖核心

public person clone()

person.

setfriends

(friendlist)

;//原轉殖資料複製到轉殖person內

return person;

//返回出轉殖體

}catch

(clonenotsupportedexception e)

}

person person3 = person1.

clone()

; system.out.

println

(person1.

getfriends()

);system.out.

println

(person3.

getfriends()

);friends.

add(

"fang");

friends.

add(

"wang");

friends.

add(

"ni");

person1.

setfriends

(friends)

;//這裡的friends屬性轉殖的只是它的乙個引用

//所以當person1改變之後,person3的friend也會改變

system.out.

println

(person1.

getfriends()

);system.out.

println

(person3.

getfriends()

);

執行結果

學習設計模式之原型模式

原型模式 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。結構圖 prototype 原型類,宣告乙個轉殖自身的介面 concreteprototype 具體原型類,實現乙個轉殖自身的操作 client 客戶端,讓乙個原型轉殖自身從而建立乙個新的物件 實現 public class ...

設計模式之原型模式

原型模式其實就是從乙個物件再建立乙個可定製的物件,而且不需要知道建立的細節。具體就是說通過複製或者轉殖乙個原型物件產生新的物件 轉殖物件 分為兩種 深複製或者淺複製,這兩種的主要區別是 在原型中如果有物件的引用,淺複製是將引用複製過來了,也就是淺複製和原型中的物件的引用相同,而深複製是將轉殖物件中引...

設計模式之原型模式

include include 此練習為原型模式方法的練習 原型模式揭示了在同一原型上可以通過複製使得 只需要例項化一次,再通過相應的類函式操作可以得到 同一原型下的不同的版本物件 此練習將考慮在實際開發中 比如 工作經歷也是作為乙個類被含在簡歷類中的情況 這情況將涉及到類的引用和深 淺複製 原型基...