日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

(Prototype)原型模式的Java实现(转)

發布時間:2024/10/12 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Prototype)原型模式的Java实现(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原型模式(Prototype):用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。 當我們已經擁有某個得來不易的寶貝時,往往我們會很想再“變”一些出來,即這個寶貝的“復制品”,這種方式簡單又理想,誰都想要學會這項本事。不可能的事情!不過,這種手段在軟件設計中是完全可以實現的,在OO中的原型模式就是這樣基于思想的。 原型模式的適用場景:(摘錄自《設計模式迷你手冊》) 1、當要實例化的類是在運行時刻指定時,例如,通過動態裝載; 2、為了避免創建一個與產品類層次平行的工廠類層次時; 3、當一個類的實例只能有幾個不同狀態組合中的一種時。建立相應數目的原型并克隆它們可能比每次用合適的狀態手工實例化該類更方便一些。 通用類圖如下:

在Java中,原型模式可以很簡單地實現,只要實現Cloneable這個標識性的接口,再覆蓋該接口中的clone()方法,即可“克隆”該實現類的任何一個對象?!翱寺 钡囊馑即蠹叶济靼?#xff0c;就是原封不動的復制。 由于Java中的最基類Object類中已經實現了Cloneable接口,故我們下面的代碼例子中的會看不到上面類圖中Prototype這個抽象類的影子。 具體代碼如下: 測試結果:
螞蟻?... 螞蟻?...
Java中有個淺拷貝和深拷貝之分,下面再給出個代碼例子。 //原型02,成員變量中包含引用變量,得用深拷貝?
class?ConcretePrototype02?implements?Cloneable {?
??private?String name;?
??private?ArrayList<String> nameList =?new?ArrayList<String>();?

??public?ConcretePrototype02(String name) {?
????this.name = name;?
????this.nameList.add(this.name);?
??}?
??//添加nameList中的對象?
??public?void?setName(String name) {?
????this.nameList.add(name);?
??}?
????
??public?ArrayList<String> getNameList() {?
????return?this.nameList;?
??}?
????
??//覆蓋Object基類中的clone()方法,并擴大該方法的訪問權限,具體化返回本類型?
??public?ConcretePrototype02 clone() {?
????ConcretePrototype02 self =?null;?
????try?{?
??????self = (ConcretePrototype02)?super.clone();?
??????//以下這句是實現深拷貝的關鍵?
//??????self.nameList = (ArrayList<String>) this.nameList.clone();?
????}?catch?(CloneNotSupportedException e) {?
??????e.printStackTrace();?
????}?
????return?self;?
??}?
}?

//測試類?
public?class?Client {?
??public?static?void?main(String[] args) {?
????ConcretePrototype02 prototype02 =?new?ConcretePrototype02("螞蟻 ...");?
????System.out.println(prototype02.getNameList());?
?????
????//通過clone獲得一個拷貝?
????ConcretePrototype02 fromClone02 = prototype02.clone();?
????fromClone02.setName("小螞蟻 ...");?
????System.out.println(fromClone02.getNameList());?
????System.out.println(prototype02.getNameList());?
??}?
} 測試結果:
拷貝之前的原型:?[螞蟻?...] 拷貝得到的對象:?[螞蟻?...,?小螞蟻?...] 拷貝之后的原型:?[螞蟻?...,?小螞蟻?...]
發現拷貝之后原來的對象持有的ArrayList<String>類型的nameList引用會隨著拷貝得到的fromClone對象執行了setName()方法而改變,這不是我們想要的結果,因為這意味著原型以及拷貝得到的對象共享同一個引用變量,這是線程不安全的。當我們去掉上面clone()方法中被注釋的語句之后再測試,得到結果如下:
拷貝之前的原型:?[螞蟻?...] 拷貝得到的對象:?[螞蟻?...,?小螞蟻?...] 拷貝之后的原型:?[螞蟻?...]
結果正確。其實,在Java中使用原型模式Prototype是相當簡單的,只要記住幾點注意點,就可以方便地實現該模式了。由于使用clone()方法來拷貝一個對象是從內存二進制流中進行IO讀寫,所以拷貝得到一個對象是不會執行該對象所對應類的構造函數的??偨Y如下: 1、構造函數不會被執行; 2、類的成員變量中若有引用類型的變量(數組也是一種對象),默認的clone()并不會對其進行拷貝,需自行提供深拷貝; String類型與intlong、char等基本類型類似,默認地會被拷貝。 總之,Java中原型模式clone()方法對我們隱藏了許多細節,或者說必要操作,它的實現機制涉及到了反射、IO流操作、序列化等,只有弄清楚這一系列的知識才能更深入地理解這些相關的知識點。 //原型01,實現Cloneable接口并覆蓋clone()方法?
class?ConcretePrototype01?implements?Cloneable {?
??private?String name;?

??public?ConcretePrototype01(String name) {?
????this.name = name;?
??}?
????
??public?void?getName() {?
????System.out.println(name);?
??}?
????
??//覆蓋Object基類中的clone()方法,并擴大該方法的訪問權限,具體化返回本類型?
??public?ConcretePrototype01 clone() {?
????ConcretePrototype01 self =?null;?
????try?{?
??????self = (ConcretePrototype01)?super.clone();?
????}?catch?(CloneNotSupportedException e) {?
??????e.printStackTrace();?
????}?
????return?self;?
??}?
}?

//測試類?
public?class?Client {?
??public?static?void?main(String[] args) {?
????ConcretePrototype01 prototype01 =?new?ConcretePrototype01("螞蟻 ...");?
????prototype01.getName();?
?????
????//通過clone獲得一個拷貝?
????ConcretePrototype01 fromClone01 = prototype01.clone();?
????fromClone01.getName();?
??}?
} 文章出處:http://haolloyin.blog.51cto.com/1177454/333442

轉載于:https://www.cnblogs.com/andyboy/p/3445205.html

總結

以上是生活随笔為你收集整理的(Prototype)原型模式的Java实现(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美三级韩国三级日本三斤 | 国产成人亚洲精品自产在线 | 男女超碰| 91国在线啪 | 免费视频www在线观看网站 | 欧美性插动态图 | 爱爱动态图 | 日韩无| a天堂v | 91秦先生在线播放 | 污污视频在线播放 | 爱情岛论坛亚洲品质自拍 | 久久成人动漫 | 日韩一级黄色大片 | 日韩精品电影一区 | 四虎国产成人精品免费一女五男 | 冲田杏梨一区二区三区 | 手机看片日本 | 在线免费观看 | 韩国主播青草55部完整 | 国产精品6 | 午夜免费激情视频 | 男女激情啪啪 | 狠狠婷婷 | 黄色大片儿 | 91久操 | 成年人免费在线观看视频网站 | 成人精品视频99在线观看免费 | 欧美一区二区日韩一区二区 | 天天看天天摸天天操 | 国产一区二区三区四区三区四 | 乱岳| 综合久久99 | 一女被多男玩喷潮视频 | 私人毛片| 99国产精品自拍 | 综合网在线视频 | 欧美r级在线 | 99成人免费视频 | 久在线观看视频 | 又黄又爽又色视频 | 亚洲天堂一区在线观看 | 性一级视频 | 欧美三日本三级少妇三 | 极品久久久久久 | 草视频在线 | 大地资源影视在线播放观看高清视频 | 午夜国产福利在线观看 | 日本中文字幕在线看 | 丁香花在线影院观看在线播放 | 女人高潮娇喘1分47秒 | 国产精品网址 | 曰本无码人妻丰满熟妇啪啪 | 国产处女 | 在线免费观看黄网站 | 午夜神器在线观看 | 99精品偷自拍 | 色爱AV综合网国产精品 | 少妇熟女视频一区二区三区 | 在线免费看91 | 久久国产精品免费看 | 色妞av | 日韩三级黄 | 色呦呦中文字幕 | 少妇精品无码一区二区免费视频 | 欧美黑人欧美精品刺激 | 一区在线观看 | 亚洲免费视频播放 | 免费香蕉视频 | 做暧暧视频在线观看 | 黄瓜视频在线观看污 | 日在线视频 | 国产精品精品视频 | 亚洲情侣av| 超碰免费97 | 日本大尺度吃奶做爰久久久绯色 | 日韩欧美国产激情 | 亚洲自拍偷拍色图 | 在线日本视频 | 日本一本久 | 成人免费视频一区二区三区 | 亚洲女成人图区 | 日日操夜夜草 | 成人av电影免费观看 | 好吊妞在线观看 | 欧美精品久久久久久久自慰 | 狠狠狠狠狠狠狠干 | www.午夜激情| 美女久久| 免费看黄在线 | a∨色狠狠一区二区三区 | 性感美女视频一二三 | 黄色aa网站 | 国产午夜激情视频 | 午夜羞羞网站 | xzjzjzjzjzj欧美大片 | 亚洲区小说区图片区 | 538任你躁在线精品免费 | asian日本肉体pics |