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