一個專業的程序員,老是把代碼的清晰性,兼容性,可移植性放在很重要的位置。他們老是經過定義大量的宏,來加強代碼的清晰度和可讀性,而又不增長編譯後的代碼長度和代碼的運行效率;他們老是在編碼的同時,就考慮到了之後的代碼維護和升級。甚至,只要分析百分之一的代碼後,你就會深入地體會到,什麼樣的代碼纔是一個專業的程序員寫的,什麼樣的代碼是一個業餘愛好者寫的。而這一點是任何沒有真正分析過標準代碼的人都沒法體會到的。java
本文會介紹一些經典的設計模式思想:程序員
Proxy代理模式算法
代理模式:爲其餘對象提供一種代理以便控制對這個對象的訪問。數據庫
能夠詳細控制訪問某個類(對象)的方法,在調用這個方法前做的前置處理(統一的流程代碼放到代理中處理)。調用這個方法後作後置處理。編程
代理模式分類:設計模式
1.靜態代理(靜態定義代理類,咱們本身靜態定義的代理類。好比咱們本身定義一個明星的經紀人類)數據結構
2.動態代理(經過程序動態生成代理類,該代理類不是咱們本身定義的。而是由程序自動生成)比較重要!!函數
結構組成源碼分析
代理模式主要涉及到三個角色:抽象角色、代理角色、真實角色(被代理的角色)。學習
抽象角色:聲明真實對象和代理對象的共同接口。即真實對象和代理對象共同要實現的行爲動做(比如房東和中介都要可以實現租房的行爲,都能把房子租給你)。
代理角色:代理角色內部含有對真實角色的引用,從而能夠去操做真實對象,同時代理對象提供與真實對象的接口,以便在任什麼時候候都能代替真實對象。同時,代理對象在執行真實對象的操做時,也能附加它本身的操做,至關於對真實對象的封裝
真實角色:代理角色所代理的對象,亦即咱們最終要引用的對象。
Factory工廠模式
工廠模式主要是爲建立對象提供過渡接口,以便將建立對象的具體過程屏蔽隔離起來,達到提升靈活性的目的。
工廠模式能夠分爲三類:
這三種模式從上到下逐步抽象,而且更具通常性。GOF在《設計模式》一書中將工廠模式分爲兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract Factory)。將簡單工廠模式(Simple Factory)看爲工廠方法模式的一種特例,二者歸爲一類。
區別:
工廠方法模式:
一個抽象產品類,能夠派生出多個具體產品類。
一個抽象工廠類,能夠派生出多個具體工廠類。
每一個具體工廠類只能建立一個具體產品類的實例。
抽象工廠模式:
多個抽象產品類,每一個抽象產品類能夠派生出多個具體產品類。
一個抽象工廠類,能夠派生出多個具體工廠類。
每一個具體工廠類能夠建立多個具體產品類的實例。
區別:
工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能建立一個具體產品類的實例,而抽象工廠模式能夠建立多個。
Singleton單例模式
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
單例模式結構圖
單例模式(Singleton)是幾個建立模式中最對立的一個,它的主要特色不是根據用戶程序調用生成一個新的實例,而是控制某個類型的實例惟一性,經過上圖咱們知道它包含的角色只有一個,就是Singleton,它擁有一個私有構造函數,這確保用戶沒法經過new直接實例它。除此以外,該模式中包含一個靜態私有成員變量instance與靜態公有方法Instance()。Instance()方法負責檢驗並實例化本身,而後存儲在靜態成員變量中,以確保只有一個實例被建立。
使用Singleton模式有一個必要條件:在一個系統要求一個類只有一個實例時才應當使用單例模式。反之,若是一個類能夠有幾個實例共存,就不要使用單例模式。
不要使用單例模式存取全局變量。這違背了單例模式的用意,最好放到對應類的靜態成員中。
不要將數據庫鏈接作成單例,由於一個系統可能會與數據庫有多個鏈接,而且在有鏈接池的狀況下,應當儘量及時釋放鏈接。Singleton模式因爲使用靜態成員存儲類實例,因此可能會形成資源沒法及時釋放,帶來問題。
Delegate委派模式
委派模式(Delegate)是面向對象設計模式中經常使用的一種模式。這種模式的原理爲類B和類A是兩個互相沒有任何關係的類,B具備和A如出一轍的方法和屬性;而且調用B中的方法,屬性就是調用A中同名的方法和屬性。B好像就是一個受A受權委託的中介。第三方的代碼不須要知道A的存在,也不須要和A發生直接的聯繫,經過B就能夠直接使用A的功能,這樣既可以使用到A的各類公能,又可以很好的將A保護起來了。
委派模式的優勢:
strategy策略模式
定義一系列的算法,把每個算法封裝起來, 而且使它們可相互替換。本模式使得算法可獨立於使用它的客戶而變化。也稱爲政策模式(Policy)。(Definea family of algorithms,encapsulate each one, andmake them interchangeable. Strategy lets the algorithmvary independently from clients that use it. )
策略模式把對象自己和運算規則區分開來,其功能很是強大,由於這個設計模式自己的核心思想就是面向對象編程的多形性的思想。
策略模式結構
當存在如下狀況時使用Strategy模式
Prototype原型模式
原型模式的主要思想是基於現有的對象克隆一個新的對象出來,通常是有對象的內部提供克隆的方法,經過該方法返回一個對象的副本,這種建立對象的方式,相比咱們以前說的幾類建立型模式仍是有區別的,以前的講述的工廠模式與抽象工廠都是經過工廠封裝具體的new操做的過程,返回一個新的對象,有的時候咱們經過這樣的建立工廠建立對象不值得,特別是如下的幾個場景的時候,可能使用原型模式更簡單也效率更高。
原型模式結構
Template模板模式
模板方法應用於下列狀況:
模板模式結構