原创 圖解設計模式(8) 觀察者模式

一、應用場景  定義對象間一種一對多的依賴關係,使得當一個對象的狀態改變,則所有依賴於它的對象都會得到通知並被自動更新。  就是一種一對多的廣播機制。 訂閱者或者消息接收者稱爲觀察者。 二、 實現要點 1. 觀察者接口,聲明update

原创 圖解設計模式(9) 委派模式

一、 應用場景 委派模式,委派模式是一個類A持有另一個類B的對象,當A要做事情時,調用B的對象去做。 就像一個老闆,公司來活了不是他自己去幹,而是委派別人去做。 委派模式不是23種設計模式中的一種。   二、 具體實現 實現要點: 1.

原创 圖解設計模式(3) 工廠方法模式

目錄 一、 簡單工廠模式 二、 工廠方法模式 三、簡單工廠與工廠方法的比較 工廠方法是由簡單工廠模式改進來的。先說一下簡單工廠模式。 一、 簡單工廠模式     就是封裝一個簡單的工廠類,提供一個對外開放的獲取實例的方法。爲了獲取不同類型

原创 圖解設計模式(10) 責任鏈模式

一、應用場景     當責任或者功能呈層級劃分時使用。         將能夠處理同一類請求的對象連成一條鏈,所提交的請求沿着鏈傳遞,鏈上的對象逐個判斷是否有能力處理該請求,如果能則處理,如果不能則傳遞給鏈上的下一個對象。     例如,

原创 圖解設計模式(6) 裝飾模式

  一、 適用場景     動態地爲一個對象增加新的功能。     裝飾模式是一種用於代替繼承的技術,無需通過繼承增加子類就能擴展對象的新功能。使用對象的關聯關係代替繼承關係,更加靈活,同時避免了產生過多類型。     比如一個汽車,具

原创 圖解設計模式(7) 代理模式

一、使用場景     通過代理,控制對類/對象的訪問。 可以在調用某個方法前或之後加上一些前置或後置處理。     比如,一個明星(如劉德華),在接到一個演出合同的時候,需要做一系列的事情。 面談,籤合同,收預付款,訂機票,演出,收尾款等

原创 圖解設計模式(4) 原型模式

目錄 一、應用場景 二、原型模式的實現 1. Cloneable接口和clone方法 2.淺克隆與深克隆 一、應用場景     原型模式就是利用一個對象去創建另一個對象,就是C++中的拷貝構造。     如果通過new創建一個對象需要非常

原创 圖解設計模式(1) 設計模式的分類

設計模式按照功能和目的通常劃分爲三類: 一、 創建型模式:關注對象的創建。對對象的實例化過程進行抽象,使調用者不用關心這些對象是如何創建的。      共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。     通常做法

原创 深入理解Java併發(3) 手寫實現簡單線程池

    一、 架構分析     我們來實現一個簡單的線程池,先看一下都需要實現哪些部分。     我們對需求進行一下簡單的抽象分析,就可以發現這個跟生產者/消費者模型有點像,我們可以畫個圖,邊分析邊往上加      1. 以生產者/消費

原创 圖解設計模式(2) 單例模式

目錄 一、什麼是單例模式  二、單例模式的實現 1. 餓漢式 2. 懶漢式 3.雙重檢測鎖式 4.靜態內部類式 5.枚舉式 一、什麼是單例模式      單例模式,就是使一個類只能產生一個實例。     應用場景:   當一個對象的產生需

原创 (轉)線程池類ThreadPoolExecutor源碼解讀

原文鏈接:https://blog.csdn.net/xiaojin21cen/article/details/87359148#51_submit_265 目錄 一、任務的提交過程 1.1 s

原创 深入理解Java併發(2) 線程池

線程的創建與銷燬都是需要消耗資源的,爲了減少線程的創建與銷燬的開銷以及產生過多線程帶來的過分調度,我們通常使用線程池來管理線程。    線程池的創建有兩種方式,一個是使用ThreadPoolExecutor類,另一個是使用Executor

原创 (轉)設計模式六大原則 見過寫的比較好的一篇

原文鏈接:http://www.uml.org.cn/sjms/201211023.asp 設計模式六大原則(1):單一職責原則 定義:不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責

原创 RPC祖上那些事兒——談談RPC的演進史

     如果一臺電腦需要用到的所有功能都在本臺PC上實現,那是最方便的事情了,但除非這是臺超級計算機,否則就難以容納所有的功能。因而我們就有了這樣一種需求——調用在其他電腦上實現的功能。     因爲我們通常關注的是結果,至於過程在哪

原创 Dubbo的一種負載均衡算法(最大剩餘線程數)

先貼上provider的性能要求     最小活躍數算法不靠譜(因爲會將請求儘量多地分到small上),但是把最小活躍數換個角度,用線程池總線程數 - 佔用線程數, 得到剩餘線程數。然後按照最大剩餘線程數來排序。     具體做法也很簡