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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式-原型模式(Prototype)

發(fā)布時(shí)間:2025/1/21 asp.net 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-原型模式(Prototype) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • Specify the kinds of objects to create using a prototypical instance,and create new objects bycopying this prototype.(用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。)簡(jiǎn)單說(shuō)明就是不通過(guò)new關(guān)鍵字產(chǎn)生對(duì)象,而是通過(guò)對(duì)象復(fù)制來(lái)實(shí)現(xiàn)就叫做原型模式。

原型模式的核心就是一個(gè)clone()方法,通過(guò)該方法進(jìn)行對(duì)象拷貝,java底層提供了一個(gè)Cloneable接口來(lái)標(biāo)示這個(gè)對(duì)象是可拷貝的,這個(gè)借口只是一個(gè)標(biāo)記作用,在JVM中有這個(gè)標(biāo)記的對(duì)象才能被拷貝。

原型模式注意事項(xiàng)

1.構(gòu)造函數(shù)不會(huì)被執(zhí)行。我們舉例說(shuō)明為什么不會(huì)執(zhí)行構(gòu)造函數(shù)。

/*** @author shuliangzhao* @Title: Car* @ProjectName design-parent* @Description: TODO* @date 2019/5/31 22:57*/ public class Car implements Cloneable{public Car() {System.out.println("我是一輛跑車(chē)...");}@Overridepublic Car clone() {Car car = null;try{car = (Car)super.clone();}catch (Exception e) {e.printStackTrace();}return car;} }

客戶(hù)端

/*** @author shuliangzhao* @Title: CarClient* @ProjectName design-parent* @Description: TODO* @date 2019/5/31 22:59*/ public class CarClient {public static void main(String[] args) {Car car = new Car();Car clone = car.clone();} }

運(yùn)行結(jié)果

?

?

從運(yùn)行結(jié)果我們可以看出只打印一句話(huà) 說(shuō)明構(gòu)造函數(shù)沒(méi)執(zhí)行。Object類(lèi)的clone方法的原理是從內(nèi)存中(具體地說(shuō)就是堆內(nèi)存)以二進(jìn)制流的方式進(jìn)行拷貝,重新分配一個(gè)內(nèi)存塊,那構(gòu)造函數(shù)沒(méi)有被執(zhí)行也是非常正常的了。

淺拷貝和深拷貝

淺拷貝例子

/*** 淺拷貝* @author shuliangzhao* @Title: Thing* @ProjectName design-parent* @Description: TODO* @date 2019/5/31 22:26*/ public class ShallowThing implements Cloneable {private List<String> list = new ArrayList<String>();@Overridepublic ShallowThing clone() {ShallowThing thing = null;try {thing = (ShallowThing) super.clone();}catch (Exception e) {e.printStackTrace();}return thing;}public void setList(String s) {this.list.add(s);}public List<String> getList() {return this.list;}}

客戶(hù)端Client

/*** @author shuliangzhao* @Title: Client* @ProjectName design-parent* @Description: TODO* @date 2019/5/31 22:30*/ public class Client {public static void main(String[] args) {//淺拷貝ShallowThing thing = new ShallowThing();thing.setList("張三");ShallowThing clone = thing.clone();clone.setList("李四");System.out.println(thing.getList());//深拷貝/* DeepThing deepThing = new DeepThing();deepThing.setList("王五");DeepThing clone1 = deepThing.clone();clone1.setList("張柳");System.out.println(deepThing.getList());System.out.println(clone1.getList());*/} }

執(zhí)行結(jié)果

?

?

?

執(zhí)行結(jié)果是兩個(gè),因?yàn)閖ava做了一個(gè)偷懶的動(dòng)作,clone方法只拷貝對(duì)象,對(duì)象內(nèi)的數(shù)組和引用對(duì)象等都不拷貝,這就是淺拷貝。兩個(gè)對(duì)象共享一個(gè)變量是一種非常不安全的方式。但是String字符串比較特殊,通過(guò)字符串池(stringpool)在需要的時(shí)候才在內(nèi)存中創(chuàng)建新的字符串。所以使用String時(shí)候可以當(dāng)做基本類(lèi)型就可以。

深拷貝例子

/*** @author shuliangzhao* @Title: DeepThing* @ProjectName design-parent* @Description: TODO* @date 2019/5/31 22:32*/ public class DeepThing implements Cloneable{private ArrayList<String> list = new ArrayList<String>();@Overridepublic DeepThing clone() {DeepThing thing = null;try {thing = (DeepThing) super.clone();this.list = (ArrayList<String>)this.list.clone();}catch (Exception e) {e.printStackTrace();}return thing;}public void setList(String s) {this.list.add(s);}public List<String> getList() {return this.list;}}

客戶(hù)端Client

/*** @author shuliangzhao* @Title: Client* @ProjectName design-parent* @Description: TODO* @date 2019/5/31 22:30*/ public class Client {public static void main(String[] args) {//淺拷貝/*ShallowThing thing = new ShallowThing();thing.setList("張三");ShallowThing clone = thing.clone();clone.setList("李四");System.out.println(thing.getList());*///深拷貝DeepThing deepThing = new DeepThing();deepThing.setList("王五");DeepThing clone1 = deepThing.clone();clone1.setList("張柳");System.out.println(deepThing.getList());System.out.println(clone1.getList());} }

執(zhí)行結(jié)果

?

?

從上圖可以看出第一個(gè)執(zhí)行結(jié)果只有一個(gè)值。這就是深拷貝。

原型模式優(yōu)點(diǎn)

1.性能好,因?yàn)槭嵌M(jìn)制拷貝,比new一個(gè)對(duì)象性能好。
2.不依賴(lài)構(gòu)造函數(shù)

與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的设计模式-原型模式(Prototype)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆app在线观看 | 国产又黄又硬又粗 | 久久艹在线观看 | 日本在线看| 人妻丝袜一区 | 91免费网站 | 国产免费的av | 爱视频福利网 | 高清国产mv在线观看 | 97超级碰碰| 懂色av蜜臀av粉嫩av分享吧最新章节 | 特级西西444www高清大胆 | 久久激情网 | 欧美日韩在线免费观看视频 | 91视频地址 | 国产午夜一区 | 爽爽窝窝午夜精品一区二区 | 青青草免费在线观看视频 | 免费看黄色片视频 | 国产欧美三级 | 精品在线观看一区二区 | 国产一区二区三区久久 | 男人天堂视频在线观看 | 蜜桃成人网 | 一级特黄aaa| 我的邻居在线观看 | 亚洲熟女www一区二区三区 | 轮番上阵免费观看在线电影 | 光溜溜视频素材大全美女 | 五月精品 | 香蕉免费在线视频 | 古装做爰无遮挡三级 | 黄色三级三级 | 国产精品嫩草影院桃色 | 欧美日韩久久精品 | 果冻传媒18禁免费视频 | 欧美专区在线观看 | 熟妇高潮喷沈阳45熟妇高潮喷 | 国产黄色小视频在线观看 | 亚洲美女www午夜 | 上原亚衣在线 | 一级黄色裸体片 | 天天看片天天爽 | 日本黄色免费观看 | 久久久久久久久免费视频 | 97国产精品人人爽人人做 | 久久a级片 | 国产免费黄网站 | 国产精品69久久久久 | 依人成人综合网 | 福利视频不卡 | a级黄色网| 国产av一区二区三区最新精品 | 色福利网 | 国产精品一区二区三区免费观看 | 久久婷婷国产 | 懂色av蜜臀av粉嫩av分享 | 久久久综合视频 | 亚洲精品二区 | 国产成人久久777777 | 丰满岳乱妇一区二区三区 | 国产伦精品一区二区三区四区免费 | 天天躁日日躁狠狠躁喷水 | 国产极品视频在线观看 | 韩日中文字幕 | 一区二区在线免费观看 | 精品一区二区欧美 | 日批免费网站 | 精品一区久久久 | 久久另类ts人妖一区二区 | 久久久亚洲国产精品 | 成人国产av一区二区三区 | 国产成人综合精品 | 人妻少妇偷人精品久久久任期 | 日韩伦人妻无码 | 99er这里只有精品 | 精品熟妇视频一区二区三区 | 成人动漫免费在线观看 | 蜜桃va| 少妇搡bbbb搡bbb搡小说 | eeuss国产一区二区三区黑人 | 手机看片日韩久久 | 亚洲高清视频一区二区 | 亚洲av无码乱码国产麻豆 | 亚洲综合在 | japansexxxxhd医生 夜夜操导航 | 伊人久久爱 | 刘亦菲久久免费一区二区 | 国产精品亚洲成在人线 | 欧美亚洲日本在线 | 久久精品三级视频 | 性久久久久 | 99久久国产综合 | 偷拍视频久久 | www麻豆视频| 97精品人妻一区二区三区香蕉 | a在线视频 | 成年人观看视频 | 中文字幕乱码中文字幕 |