原创 設計模式-行爲型之觀察者(observer)模式

定義 當被觀察者發生變化時,通知觀察者。 使用場景 發佈訂閱。不同的客戶端關注同一消息。 比如我們手機訂閱的新聞,微信公衆號推文等。 UML圖 代碼實現 // 被觀察者(通知者) public class Observa

原创 設計模式-行爲型之迭代器(Iterator)模式

定義 一個一個的遍歷,將遍歷與實現分離開來。 使用場景 集合中元素的遍歷。 可以定製化遍歷方式。 UML圖 代碼實現 public class Aggregate { private int[] element

原创 設計模式-行爲型之策略(strategy)模式

定義 整體替換算法。 使用場景 針對於不同的場景提供不同的解決方案(算法)。 UML圖 代碼實現 //策略接口 public interface Strategy { public void sort(Integ

原创 設計模式-結構型之享元(flyweight)模式

定義 通過儘量共享實例來避免 new 出實例。 使用場景 大範圍使用,可以使用該模式達到共享。 舉例:數據庫連接池、線程池等。 UML圖 代碼實現 // 共享對象 public class Flyweight {

原创 設計模式-行爲型之狀態(state)模式

定義 用類來表示狀態。 行爲隨着狀態對象改變而改變。 使用場景 代碼中包含大量與對象狀態有關的條件語句。 對象的行爲依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行爲。 UML圖 代碼示例 公交車狀態 /

原创 設計模式-結構型之橋接(bridge)模式

定義 將類的功能層次結構與實現層次結構分離。 功能層次結構: – 當我們需要新增加一個功能時,通常我們會新增一個子類,當還需要增加功能,我們在現在子類上增加一個子類,這種繼承樹的延伸稱作類的功能層次結構。 實現層次結構: – 當

原创 設計模式-行爲型之訪問者(Visitor)模式

定義 將數據結構和對數據結構的操作分離。 使用場景 穩定的數據結構和易變的操作耦合問題。 需要對一個對象結構中的對象進行很多不同的並且不相關的操作,而需要避免這些操作“污染”這些對象的類,也不希望在增加新操作時修改這些類。

原创 設計模式-行爲型之責任鏈(responsibility)模式

定義 將不能處理的事情交給別人去處理。 使用場景 弱化請求者與處理者的關係。 舉例:審批鏈:三天內假直系領導審批,七天內假期副總審批,兩週內總經理審批。 UML圖 代碼實現 // 抽象責任者 public abstrac

原创 java併發編程(十一)之線程交換器Exchanger

一、定義 每個線程將條目上的某個方法呈現給 exchange 方法,與夥伴線程進行匹配,並且在返回時接收其夥伴的對象。Exchanger 可能被視爲 SynchronousQueue 的雙向形式。Exchanger 可能在應用程序(比如遺

原创 reids持久化之AOF

AOF 1 前言 RDB 的缺陷是最後一次持久化後的數據可能丟失。而AOF就是用來解決這個問題的. 2 簡介 append only file ,以日誌的形式來記錄每個寫操作,將Redis執行過的所有寫指令記錄下來(讀操作不記錄)

原创 redis數據類型之hash

hash: 元素是kv鍵值對 1 設置和獲取值 127.0.0.1:6379> hset student name tom // hset key field value (integer) 1 127.0.0.1:6379> h

原创 redis數據類型之List

List類型:先進先出隊列 1 設置和獲取值 127.0.0.1:6379> lpush list1 1 2 3 4 //從list左邊入隊 (integer) 4 127.0.0.1:6379> rpush list2 1 2

原创 redis數據類型之ZSet

zset : 有分數有序的set 1 設置和獲取 127.0.0.1:6379> zadd zset1 10 a //zadd key score key (integer) 1 127.0.0.1:6379> zadd zset

原创 redis數據類型之String

常用命令 127.0.0.1:6379> select 1 //切庫. 如 select 1 切換到索引爲1的庫 OK 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> keys *//

原创 redis數據類型之Set

set類型:無序不重複集合 1 設置和獲取 127.0.0.1:6379> sadd set2 v1 v2 v3 v3 (integer) 3 127.0.0.1:6379> smembers set2 //無序不重複 1) "v