原型模式的应用场景_23中设计模式(上)
學(xué)習(xí)主題:設(shè)計(jì)模式
學(xué)習(xí)目標(biāo):
對應(yīng)視頻:
http://www.itbaizhan.cn/course/id/85.html
對應(yīng)文檔:
無
對應(yīng)作業(yè)
1. 單例模式_應(yīng)用場景_餓漢式_懶漢式(視頻1-3)
(1) 什么是單例模式?為什么需要單例模式?
保證一個(gè)類只有一個(gè)實(shí)例,并且提供一個(gè)訪問該實(shí)例的全局訪問點(diǎn)
由于單例模式只生成一個(gè)實(shí)例,減少了系統(tǒng)性能開銷,當(dāng)一個(gè)對象的產(chǎn)生需要比較多的資源時(shí),如讀取配置,產(chǎn)生其他依賴對象時(shí),則可以通過在應(yīng)用啟動時(shí)直接產(chǎn)生一個(gè)單例對象,然后永久駐留內(nèi)存的方式來解決
單例模式可以在系統(tǒng)設(shè)置全局的訪問點(diǎn),優(yōu)化環(huán)共享資源訪問,例如可以設(shè)計(jì)一個(gè)單例類,負(fù)責(zé)所有數(shù)據(jù)表的映射處理
(2) 餓漢式與懶漢式的區(qū)別是什么?
餓漢式在類加載的時(shí)候就已經(jīng)實(shí)例了唯一對象(線程安全),用戶的每次訪問都是返回此對象,效率高(不能延遲加載)
靜態(tài)內(nèi)部式最好 (即可以延遲加載,效率又高)
枚舉式(不用擔(dān)心反編譯和反射惡意獲取新實(shí)例)
雙重檢測鎖(JVM底層內(nèi)部模型原因,有時(shí)候會出問題)
懶漢式在用戶調(diào)用時(shí)才實(shí)例化對象 ,用戶不安全需要加線程鎖,效率低(延遲加載)
2. 簡單工廠模式_面向?qū)ο笤O(shè)計(jì)原則_開閉原則_依賴反轉(zhuǎn)原則_迪米特法則(視頻4-6)
(1) 說一說簡單工廠模式
用工廠方法代替new 操作(就是說對象由工廠new ,調(diào)用者只負(fù)責(zé)使用,這就實(shí)現(xiàn)了調(diào)用者和實(shí)現(xiàn)類的解耦)
就是工廠類一般是使用靜態(tài)方法通過接受的參數(shù)的不同返回不同的對象實(shí)例(增加新產(chǎn)品的話就需要修改源碼,這就違反了OCP原則開閉原則,就是不推薦使用修改源碼的方式實(shí)現(xiàn)新功能,而是寫一個(gè)新的工廠來實(shí)現(xiàn)新的功能)
(2) 什么是開閉原則?
就是不推薦使用修改源碼的方式實(shí)現(xiàn)新功能,而是寫一個(gè)新的工廠來實(shí)現(xiàn)新的功能
OCP(開閉原則,Open-Closed Principle):一個(gè)軟件的實(shí)體應(yīng)當(dāng)對擴(kuò)展開
放,對修改關(guān)閉。
(2)什么是依賴反轉(zhuǎn)原則?
DIP(依賴倒轉(zhuǎn)原則,Dependence Inversion Principle):要針對接口編程,
不要針對實(shí)現(xiàn)編程。
(3) 什么是迪米特法則?
LoD(迪米特法則,Law of Demeter):只與你直接的朋友通信,而避免和
陌生人通信。
3. 建造者模式詳解_類圖關(guān)系
(1) 什么是建造者模式?類與類之間有什么關(guān)系?
本質(zhì)就是對一個(gè)復(fù)雜的組件分離給了兩個(gè)對象實(shí)現(xiàn), 組件的零件由(Builder來負(fù)責(zé)),零件的裝配由Director負(fù)責(zé),從而構(gòu)造出復(fù)雜的對象
一般適用于復(fù)雜對象的構(gòu)建
由于實(shí)現(xiàn)了構(gòu)建和裝配的解耦,不同的構(gòu)建器,相同的裝配,也可以做出不同的對象;相同的構(gòu)建器不同的裝配模板也可以做出不同的對象.也就是實(shí)現(xiàn)了構(gòu)建算法,裝配算法的解耦,實(shí)現(xiàn)了更好的復(fù)用
分享/講解/擴(kuò)展思考
點(diǎn)名提問從第一節(jié)課到最后一節(jié)課分別學(xué)到了什么,直到同學(xué)們把所有的知識點(diǎn)都說出來并且保證無誤。
第206次(設(shè)計(jì)模式)
學(xué)習(xí)主題:設(shè)計(jì)模式
學(xué)習(xí)目標(biāo):
對應(yīng)視頻:
http://www.itbaizhan.cn/course/id/85.html
對應(yīng)文檔:
無
對應(yīng)作業(yè)
4. 原型模式_prototype_淺復(fù)制_深復(fù)制_Clonable接口
(1) 什么是原型模式?
本質(zhì)就是通過克隆對象來節(jié)省時(shí)間
通過new產(chǎn)生一個(gè)對象需要飛非常繁瑣的數(shù)據(jù)準(zhǔn)備或訪問權(quán)限,則可以使用原型模式
通過java中的克隆技術(shù),以某個(gè)對象為原型,復(fù)制出新的對象 ,顯然,新的對象具備原型對象的特點(diǎn)
優(yōu)勢:效率高(直接克隆,避免了重新指向構(gòu)造過程步驟)
克隆類似于new,但不同于new,new創(chuàng)建新的對象屬性采用的是默認(rèn)值,克隆出的對象的屬性值完全和原型對象相同,并且克隆出的新對象不會改變原型對象.然后,再修改克隆對象的值
原型模式實(shí)現(xiàn): – Cloneable接口和clone方法 – Prototype模式中實(shí)現(xiàn)起來最困難的地方就是內(nèi)存復(fù)制操作,所幸在Java中提供了 clone()方法替我們做了絕大部分事情。
(2) 什么是淺復(fù)制?什么是深復(fù)制?
淺復(fù)制存在的問題
被復(fù)制的對象的所有變量都含有與原來對象相同的值,而所有的對其他對象的引用都仍然指向原理的對象
深復(fù)制的實(shí)現(xiàn)(就是將引用的對象也復(fù)制一般,指向新復(fù)制的對象,也可以使用序列化和反序列化技術(shù)實(shí)現(xiàn)深克隆)
深復(fù)制把引用的變量指向復(fù)制過的新對象,而不是原有的被引用的對象
深復(fù)制:讓已實(shí)現(xiàn)Clonable接口中的類中的屬性也實(shí)現(xiàn)Clonable接口
基本數(shù)據(jù)類型和string能夠自動實(shí)現(xiàn)深度克隆(值的復(fù)制)
1.通過序列化和反序列化// User user2=(User) user.clone();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(user);
byte[] bytes = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
User user2=(User) ois.readObject();//克隆好的對象
2.通過正常的克隆
//復(fù)制對象
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj= super.clone();//直接調(diào)用父類的克隆方法
/** //添加如下內(nèi)容實(shí)現(xiàn)深復(fù)制
User user = (User) obj;
user.birthday = (Date) this.birthday.clone();//將date屬性也克隆一份
*/ return obj;
}
(3) Clonable接口是做什么用的
克隆需要實(shí)現(xiàn)的接口
5. 適配器模式_對象適配器_類適配器_開發(fā)中場景
(1) 什么是適配器模式?什么時(shí)候用適配器模式?
將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,Adapter模式使得原本接口不兼容而不能一起工作的那些類可以在一起工作
當(dāng)你需要使用一個(gè)接口與你不兼容的類時(shí)可以使用適配器模式
6. 代理模式
(1) 什么是代理模式?為什么需要代理模式?代理模式有什么好處
通過代理讓真實(shí)角色只做它該做的事,一些平常事可以交給代理去做,真正需要真實(shí)角色做的事就讓代理通知
7. 橋接模式_多層繼承結(jié)構(gòu)_銀行日志管理_銀行系統(tǒng)消息管理_人力資源的獎(jiǎng)金計(jì)算
(1) 什么是橋接模式?為什么需要橋接模式?什么業(yè)務(wù)場景下使用橋接模式
橋接模式核心:
處理多層繼承結(jié)構(gòu),處理多維度變化的場景,將各個(gè)維度設(shè)計(jì)成獨(dú)立的繼承結(jié)構(gòu),使各個(gè)維度可以獨(dú)立的擴(kuò)展在抽象層建立關(guān)聯(lián)
為什么需要橋架模式, 減少類與類之間的耦合,更好的可擴(kuò)展性,
8. 組合模式_樹狀結(jié)構(gòu)_殺毒軟件架構(gòu)_JUnite底層架構(gòu)_常見開發(fā)場景
(1) 什么是組合模式? 什么時(shí)候使用組合模式?
把部分和整體的關(guān)系用樹形結(jié)構(gòu)來表示,從而使客戶端可以使用統(tǒng)一的方式處理部分對象和整體對象
分享/講解/擴(kuò)展思考
點(diǎn)名提問從第一節(jié)課到最后一節(jié)課分別學(xué)到了什么,直到同學(xué)們把所有的知識點(diǎn)都說出來并且保證無誤。
總結(jié)
以上是生活随笔為你收集整理的原型模式的应用场景_23中设计模式(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用函数wavread对语音信号进行采样
- 下一篇: python抢票代码_教你用Python