最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第7章 原型模式

2022-02-15 20:52 作者:取悅疾風(fēng)  | 我要投稿

內(nèi)容來自尚硅谷Java設(shè)計(jì)模式(圖解+框架源碼剖析)_嗶哩嗶哩_bilibili

寫在前面:本文內(nèi)容大致和原視頻內(nèi)老師的筆記內(nèi)容相同,會偶爾插入自己的注釋和理解,盡量會完成作業(yè)

兄弟們!學(xué)就完事了!加油!奧里給!

7.1克隆羊問題

現(xiàn)在有一只羊tom,姓名為: tom,年齡為:1,顏色為:白色,請編寫程序創(chuàng)建和tom羊?qū)傩酝耆嗤?0只羊。

7.2傳統(tǒng)方式解決克隆羊問題

思路分析(圖解)

看老師代碼的演示

7.3傳統(tǒng)方式的優(yōu)缺點(diǎn)

1.????? 優(yōu)點(diǎn)是比較好理解,簡單易操作。

2.????? 在創(chuàng)建新的對象時(shí),總是需要重新獲取原始對象的屬性,如果創(chuàng)建的對象比較復(fù)雜時(shí),效率較低

3.????? 總是需要重新初始化對象,而不是動態(tài)地獲得對象運(yùn)行時(shí)的狀態(tài),不夠靈活

4.????? 改進(jìn)的思路分析

?

思路:Java中 Object類是所有類的根類,Object類提供了一個(gè) clone()方法,該方法可以將一個(gè)Java對象復(fù)制一份,但是需要實(shí)現(xiàn)clone的Java類必須要實(shí)現(xiàn)一個(gè)接口Cloneable,該接口表示該類能夠復(fù)制且具有復(fù)制的能力=>原型模式

7.4原型模式基本介紹

基本介紹

1)????? 原型模式(Prototype模式)是指:用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型,創(chuàng)建新的對象

2)????? 原型模式是一種創(chuàng)建型設(shè)計(jì)模式,允許一個(gè)對象再創(chuàng)建另外一個(gè)可定制的對象,無需知道如何創(chuàng)建的細(xì)節(jié)

3)????? 工作原理是:通過將一個(gè)原型對象傳給那個(gè)要發(fā)動創(chuàng)建的對象,這個(gè)要發(fā)動創(chuàng)建的對象通過請求原型對象拷貝它們自己來實(shí)施創(chuàng)建,即對象.clone()

4)????? 形象的理解:孫大圣拔出猴毛,變出其它孫大圣

7.5原型模式原理結(jié)構(gòu)圖-uml類圖

原理結(jié)構(gòu)圖說明

1)????? Prototype:原型類,聲明一個(gè)克隆自己的接口

2)????? ConcretePrototype:具體的原型類,實(shí)現(xiàn)一個(gè)克隆自己的操作

3)????? Client:讓一個(gè)原型對象克隆自己,從而創(chuàng)建一個(gè)新的對象(屬性一樣

7.6原型模式解決克隆羊問題的應(yīng)用實(shí)例

使用原型模式改進(jìn)傳統(tǒng)方式,讓程序具有更高的效率和擴(kuò)展性。

代碼實(shí)現(xiàn)

7.7原型模式在Spring框架中的源碼分析

7.8深入討論-淺拷貝和深拷貝

7.8.1淺拷貝介紹

對于數(shù)據(jù)類型是基本數(shù)據(jù)類型的成員變量,淺拷貝會直接進(jìn)行值傳遞,也就是將該屬性值復(fù)制一份給新的對象。

對于數(shù)據(jù)類型是引用數(shù)據(jù)類型的成員變量,比如說成員變量是某個(gè)數(shù)組、某個(gè)類的對象等,那么淺拷貝會進(jìn)行引用傳遞,也就是只是將該成員變量的引用值(內(nèi)存地址)復(fù)制一份給新的對象。因?yàn)閷?shí)際上兩個(gè)對象的該成員變量都指向同一個(gè)實(shí)例。在這種情況下,在一個(gè)對象中修改該成員變量會影響到另一個(gè)對象的該成員變量值

前面我們克隆羊就是淺拷貝

淺拷貝是使用默認(rèn)的clone()方法來實(shí)現(xiàn)

sheep = (Sheep) super.clone();

7.8.2深拷貝基本介紹

1)????? 復(fù)制對象的所有基本數(shù)據(jù)類型的成員變量值

2)????? 為所有引用數(shù)據(jù)類型的成員變量申請存儲空間,并復(fù)制每個(gè)引用數(shù)據(jù)類型成員變量所引用的對象,直到該對象可達(dá)的所有對象。也就是說,對象進(jìn)行深拷貝要對整個(gè)對象(包括對象的引用類型)進(jìn)行拷貝

3)????? 深拷貝實(shí)現(xiàn)方式1:重寫clone方法來實(shí)現(xiàn)深拷貝

4)????? 深拷貝實(shí)現(xiàn)方式2:通過對象序列化實(shí)現(xiàn)深拷貝(推薦)

7.9深拷貝應(yīng)用實(shí)例

1)????? 使用重寫clone方法實(shí)現(xiàn)深拷貝

2)????? 使用序列化來實(shí)現(xiàn)深拷貝

3)????? 代碼演示

7.10原型模式的注意事項(xiàng)和細(xì)節(jié)

1)????? 創(chuàng)建新的對象比較復(fù)雜時(shí),可以利用原型模式簡化對象的創(chuàng)建過程,同時(shí)也能夠提高效率

2)????? 不用重新初始化對象,而是動態(tài)地獲得對象運(yùn)行時(shí)的狀態(tài)

3)????? 如果原始對象發(fā)生變化(增加或者減少屬性),其它克隆對象的也會發(fā)生相應(yīng)的變化,無需修改代碼

4)????? 在實(shí)現(xiàn)深克隆的時(shí)候可能需要比較復(fù)雜的代碼

5)????? 缺點(diǎn):需要為每一個(gè)類配備一個(gè)克隆方法,這對全新的類來說不是很難,但對已有的類進(jìn)行改造時(shí),需要修改其源代碼,違背了ocp原則,這點(diǎn)請同學(xué)們注意

兄弟們!學(xué)就完事了!加油!奧里給!


第7章 原型模式的評論 (共 條)

分享到微博請遵守國家法律
霍山县| 兖州市| 保靖县| 福州市| 云和县| 汾西县| 哈尔滨市| 隆尧县| 紫阳县| 沁阳市| 和林格尔县| 驻马店市| 青田县| 高碑店市| 图木舒克市| 弋阳县| 重庆市| 若尔盖县| 武鸣县| 蕉岭县| 衡山县| 商水县| 平原县| 随州市| 大田县| 义乌市| 景德镇市| 项城市| 灵宝市| 江山市| 南汇区| 闻喜县| 丹凤县| 桃江县| 南陵县| 镶黄旗| 汉源县| 新昌县| 建昌县| 丹棱县| 溧水县|