原型模式是一種建立型模式,它採取複製原型物件的方法來建立物件的例項。使用原型模式建立的例項,具有與原型一樣的資料。
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 此練習為原型模式方法的練習 原型模式揭示了在同一原型上可以通過複製使得 只需要例項化一次,再通過相應的類函式操作可以得到 同一原型下的不同的版本物件 此練習將考慮在實際開發中 比如 工作經歷也是作為乙個類被含在簡歷類中的情況 這情況將涉及到類的引用和深 淺複製 原型基...