原创 Collections中的內部集合類

Collections中的內部集合類 源碼基於1.8.0_112 Collections中提供了大量的集合類,以代理的方式對現有的集合進行了功能上的修改。 總共有以下幾類集合: Unmodifiable:不可修改的集合類 Sy

原创 工廠模式

1. 簡單工廠 代碼類圖 java代碼 // 定義pizza類型 public enum PizzaType { cheese,clam } // 披薩父類 public class Pizza { publ

原创 命令模式

命令模式將請求封裝成對象,以便使用不同的請求,隊列或者日誌來參數化其他對象。命令模式也支持可撤銷的操作。 現在有如下圖遙控器。有3個可編程的插槽,以及對應的按鈕。黑色按鈕爲開關按鈕,有按下和彈起,兩種狀態。紅色按鈕爲撤銷按鈕,撤銷

原创 適配器模式

適配器模式將一個類的接口,轉換成客戶期望的另一個接口。適配讓原本接口不兼容的類可以合作無間。 類圖 java代碼 // 鴨子接口 public interface Duck { void quack(); // 呱呱

原创 單例模式

單例模式確保一個類只有一個實例,並提供一個全局訪問點。 有些對象我們只需要一個,如線程池、緩存、日誌對象、設備驅動等。事實上這些對象如果有多個實例,會造成許多問題。 簡單示例 public class SimpleSingleto

原创 代理模式

代理模式爲另一個對象提供一個替身或佔位符控制對這個對象的訪問 假設現在你需要一筆貸款,那麼你可以直接找銀行,也可以找貸款經紀人,貸款經紀人能夠提供更詳細的信息、更便捷的服務。如果你的信用不夠,或者想要更優惠的組合,銀行可能不能讓你滿意。

原创 組合模式

組合模式允許你將對象組合成樹形狀結構來表現”整體/部分“層次結構。組合能讓客戶以一致的方式處理個別對象以及對象組合。 閱讀組合模式之前建議先閱讀迭代器模式。 在迭代器模式中,Waitress類中指管理了PancakeHouseMenu

原创 動態代理

代理模式需要爲每個類編寫一個代理類,動態代理則會自動生成代理類簡化操作。 實現動態代理有兩種方式java自帶api和cglib。 java自帶api 基於接口生成代理類,實現動態代理 /** * 功能接口 */ public int

原创 CopyOnWriteArrayList源碼分析

CopyOnWriteArrayList 源碼基於1.8.0_112 CopyOnWriteArrayList也是通過數組來存儲元素,閱讀過之前的ArrayList的話這邊應該很容易理解 原理 :CopyOnWriteArrayList內

原创 HashMap源碼解析

HashMap 源碼基於1.8.0_112 HashMap是最常用的集合之一,原理不是很難,代碼相對較繁瑣 原理 :HashMap維護一個數組(很多的桶),每個桶中根據hash值放入鏈表,鏈表達到一定長度後轉化爲紅黑樹。思考,如果在分佈均

原创 ArrayList源碼分析

ArrayList 源碼基於1.8.0_112 ArrayList是最常用的集合之一,結構也比較簡單。 原理 :ArrayList內部使用一個數組存儲放入的數據,數組使用默認大小初始化(也可以自定義),當數組無法再放入更多的對象時,數組會

原创 橋接模式

橋接模式不僅改變實現,也改變抽象 java類圖 java代碼 // 實現層次,電視機接口 public interface TV { void on(); void off(); void tuneChan

原创 LinkedList源碼分析

LinkedList 源碼基於1.8.0_112 LinkedList個人使用的不是很多,結構也比較簡單。 原理 :LinkedList中使用了雙向鏈表存儲元素,鏈表這裏就不在詳述了。 成員變量 大致瀏覽,結合具體方法來了解具體含義

原创 Vector源碼解析

Vector 源碼基於1.8.0_112 Vector使用的相對較少,結構與ArrayList幾乎一樣。Vector的public方法大多爲synchronized,是線程安全的。 原理 :ArrayList內部使用一個數組存儲放入的數據

原创 歡迎使用CS

歡迎使用Markdown編輯器寫博客 本Markdown編輯器使用StackEdit修改而來,用它寫博客,將會帶來全新的體驗哦: Markdown和擴展Markdown簡潔的語法 代碼塊高亮 圖片鏈接和圖片上傳 LaTex數學公式 UM