flying
既然選擇了遠(yuǎn)方,只有風(fēng)雨兼程
BlogJava
|
首頁(yè)
| |
發(fā)新文章
|
聯(lián)系
|
聚合
|
管理
設(shè)計(jì)模式學(xué)習(xí)筆記(六)-------原型模式(Prototype)
???名稱:Prototype(原型模式)
?
?? 意圖:用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。
?
?? 適用環(huán)境:當(dāng)一個(gè)系統(tǒng)應(yīng)該獨(dú)立于它的產(chǎn)品創(chuàng)建、構(gòu)成和表示時(shí),要使用Prototype模式;以及要實(shí)例化的類是在運(yùn)行時(shí)刻指定時(shí),例如,通過(guò)動(dòng)態(tài)裝載;或者為了避免創(chuàng)建一個(gè)與產(chǎn)品類層次平行的工廠類層次時(shí);或者 當(dāng)一個(gè)類的實(shí)例只能有幾個(gè)不同狀態(tài)組合中的一種時(shí)。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。
????結(jié)構(gòu)圖:如下
?
java中提供了clone()來(lái)實(shí)現(xiàn)對(duì)象克隆。所以prototype模式變得了很簡(jiǎn)單。
只要實(shí)現(xiàn)接口Cloneable就可以了
package
?prototype;
import
?java.util.Date;
import
?java.io.
*
;
public
?
class
?Monkey?
implements
?Cloneable
{
????
private
?
int
?height;
????
private
?
int
?weight;
????
private
?GoldRingedStaff?staff;
????
private
?Date?birthDate;
????
????
public
?Monkey()
{
????????birthDate
=
new
?Date();
????????staff
=
new
?GoldRingedStaff();
????}
?
???? ????
//
淺拷貝
???????
??
public
?Object?clone()
{
????????Monkey?temp
=
null
;
????????
try
{
????????????temp
=
(Monkey)
super
.clone();
????????}
catch
(CloneNotSupportedException?e)
{
????????}
finally
{
????????????
return
?temp;
????????}
????????
????}
}
深拷貝:上面簡(jiǎn)單的調(diào)用了Object的clone()方法,此時(shí)只是進(jìn)行了淺拷貝,若Monkey里含有對(duì)象成員staff,則用上述方法克隆出的對(duì)象與原對(duì)象指向同一個(gè)對(duì)象staff,顯然有時(shí)候這并不滿足要求。
深拷貝是指:被復(fù)制的對(duì)象的所有變量都含有與原來(lái)對(duì)象相同的值,除去那些引用其它變量的對(duì)象。
在Java中可以利用串行化(Serivalized)來(lái)實(shí)現(xiàn)深拷貝,先使一個(gè)對(duì)象實(shí)現(xiàn)Serializable接口,然后把對(duì)象(對(duì)象的一個(gè)拷貝)寫(xiě)入一個(gè)流中,后再?gòu)牧骼镒x出來(lái),這樣便可重復(fù)創(chuàng)建對(duì)象。
package
?prototype;
import
?java.util.Date;
import
?java.io.
*
;
public
?
class
?Monkey?
implements
?Cloneable,Serializable
{
????
private
?
int
?height;
????
private
?
int
?weight;
????
private
?GoldRingedStaff?staff;?? //GoldRingedStaff必須實(shí)現(xiàn)Serializable接口
????
private
?Date?birthDate;
????
????
public
?Monkey()
{
????????birthDate
=
new
?Date();
????????staff
=
new
?GoldRingedStaff();
????}
????????
//
深拷貝
????
public
?Object?deepClone()
throws
?IOException,ClassNotFoundException
{
????????ByteArrayOutputStream?bo
=
new
?ByteArrayOutputStream();
????????ObjectOutputStream?oo
=
new
?ObjectOutputStream(bo);
????????oo.writeObject(
this
); //寫(xiě)入流中
????????ByteArrayInputStream?bi
=
new
?ByteArrayInputStream(bo.toByteArray());
????????ObjectInputStream?oi
=
new
?ObjectInputStream(bi);
????????
return
?oi.readObject(); //從流中讀出
????}
????}
使用原型模式,有以下結(jié)論:
?????????1.在運(yùn)行時(shí),可以根據(jù)需要,以復(fù)制的方式增加和刪除類。(登記型原形模式)
???????? 2.可以基于程序條件,在運(yùn)行時(shí)修改一個(gè)類的內(nèi)部數(shù)據(jù)表示。
???????? 3.還可以在運(yùn)行時(shí)指定新的對(duì)象,而無(wú)需創(chuàng)建一系列類和繼承結(jié)構(gòu)。
參考資料:《Java與模式》
????????????????????《Java設(shè)計(jì)模式》
?????????????????? ?
http://www.lvjiyong.com/books/DesignPatterns/16.html
發(fā)表于 2006-08-10 03:43
gooogle
閱讀(163)
評(píng)論(0)
編輯
收藏
所屬分類:
設(shè)計(jì)模式
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
設(shè)計(jì)模式學(xué)習(xí)總結(jié)
設(shè)計(jì)模式學(xué)習(xí)筆記(二十四)--------訪問(wèn)者(Visitor)模式
設(shè)計(jì)模式學(xué)習(xí)筆記(二十三)--------策略(Strategy)模式
設(shè)計(jì)模式學(xué)習(xí)筆記(二十二)----------模板方法 (Template Method)模式
設(shè)計(jì)模式學(xué)習(xí)筆記(二十一)--------備忘錄( Memento)模式
設(shè)計(jì)模式學(xué)習(xí)筆記(二十)--------狀態(tài)(State) 模式
設(shè)計(jì)模式學(xué)習(xí)筆記(十九)--------觀察者(Observer)模式
設(shè)計(jì)模式學(xué)習(xí)筆記(十八)---------中介(Mediator)模式
設(shè)計(jì)模式學(xué)習(xí)筆記(十七)----------迭代器(Iterator)模式
設(shè)計(jì)模式學(xué)習(xí)筆記(十六)---------解釋器(Interpreter)模式
<
2006年8月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
留言簿
(2)
給我留言
查看公開(kāi)留言
查看私人留言
搜索
最新隨筆
1.?struts2 客戶端驗(yàn)證
2.?Struts2整合Spring
3.?Java動(dòng)態(tài)代理的一個(gè)例子
4.?Struts2的攔截器
5.?Struts2文件的上傳
6.?在D630上安裝了Ubuntu 8.04.1
7.?struts2類型轉(zhuǎn)換
8.?用moodle構(gòu)造課程學(xué)習(xí)網(wǎng)站
9.?java虛擬機(jī)常用參數(shù)詳解
10.?初試Java RMI
最新評(píng)論
1.?111
111
--11
2.?re: 在struts2中利用ajax進(jìn)行服務(wù)器驗(yàn)證[未登錄](méi)
啊啊
--啊
3.?re: 在struts2中利用ajax進(jìn)行服務(wù)器驗(yàn)證[未登錄](méi)
謝謝你了。。。。。。
--皮皮
4.?re: struts2 客戶端驗(yàn)證
為什么會(huì)拋出異常???
--永恒的興
5.?re: 用moodle構(gòu)造課程學(xué)習(xí)網(wǎng)站
誰(shuí)能給個(gè)汽修學(xué)習(xí)網(wǎng)站!
--..
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 gooogle
主站蜘蛛池模板:
亚洲人成电影青青在线播放
|
无码免费又爽又高潮喷水的视频
|
最近最新MV在线观看免费高清
|
亚洲国产日韩综合久久精品
|
亚洲国产V高清在线观看
|
免费A级毛片无码专区
|
亚洲精品一卡2卡3卡四卡乱码
|
亚洲永久精品ww47
|
69成人免费视频无码专区
|
精品免费久久久久国产一区
|
自拍偷自拍亚洲精品第1页
|
在线免费观看国产
|
国产AV日韩A∨亚洲AV电影
|
亚洲综合日韩中文字幕v在线
|
国产精品成人无码免费
|
久久精品国产免费一区
|
亚洲国产精品无码观看久久
|
亚洲视频免费在线观看
|
亚洲成人国产精品
|
欧美最猛性xxxxx免费
|
你是我的城池营垒免费看
|
亚洲乱码国产乱码精华
|
五月天网站亚洲小说
|
全亚洲最新黄色特级网站
|
色播精品免费小视频
|
中文字幕在线免费播放
|
亚洲AV色欲色欲WWW
|
亚洲国产美女福利直播秀一区二区
|
亚洲日本中文字幕一区二区三区
|
人妻丰满熟妇无码区免费
|
免费的黄色网页在线免费观看
|
亚洲国产日韩在线成人蜜芽
|
国产亚洲精品观看91在线
|
国产精品四虎在线观看免费
|
国产桃色在线成免费视频
|
免费在线看污视频
|
久久久精品国产亚洲成人满18免费网站
|
亚洲第一男人天堂
|
亚洲日本视频在线观看
|
亚洲人成电影在线天堂
|
久久九九亚洲精品
|