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
閱讀(164)
評(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
主站蜘蛛池模板:
日本a级片免费看
|
性短视频在线观看免费不卡流畅
|
手机在线看永久av片免费
|
国产AV无码专区亚洲精品
|
黄 色一级 成 人网站免费
|
亚洲一级片内射网站在线观看
|
黄网站色视频免费观看45分钟
|
亚洲综合小说另类图片动图
|
精品免费人成视频app
|
亚洲免费电影网站
|
拨牐拨牐x8免费
|
爱情岛论坛亚洲品质自拍视频网站
|
亚洲成A∨人片天堂网无码
|
在线精品自拍亚洲第一区
|
亚洲AV蜜桃永久无码精品
|
yellow免费网站
|
亚洲色中文字幕无码AV
|
午夜精品免费在线观看
|
亚洲另类精品xxxx人妖
|
妞干网免费观看视频
|
亚洲av成人片在线观看
|
亚洲乱码中文字幕手机在线
|
两性色午夜免费视频
|
久久亚洲AV成人无码软件
|
日韩亚洲国产高清免费视频
|
亚洲精品美女久久久久久久
|
亚洲国产V高清在线观看
|
APP在线免费观看视频
|
亚洲校园春色小说
|
四虎影院永久免费观看
|
中文字幕无码毛片免费看
|
亚洲精品乱码久久久久久下载
|
午夜视频在线观看免费完整版
|
成年网站免费入口在线观看
|
亚洲视频网站在线观看
|
啦啦啦高清视频在线观看免费
|
美女免费精品高清毛片在线视
|
国产AⅤ无码专区亚洲AV
|
中国xxxxx高清免费看视频
|
黑人粗长大战亚洲女2021国产精品成人免费视频
|
亚洲视频在线免费播放
|