設計模式是什麼java
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了可重用代碼、讓代碼更容易地被他人理解、保證代碼可靠性。毫無疑問,設計模式於己於人於系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石脈絡,如同大廈的結構同樣。編程
整體來講,設計模式分爲3大類總共23種:設計模式
一、建立型模式,共5種併發
工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式框架
二、結構型模式,共7種測試
適配器模式、裝飾器模式、外觀模式、橋接模式、組合模式、享元模式spa
三、行爲型模式,共11種線程
策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式設計
其實還有兩類,即併發性模式和線程池模式。設計模式的模塊不會每一種設計模式都講解,而是挑選一些重要的,經常使用的設計模式進行講解,重質不重量。對象
設計模式六大原則
一、開閉原則OCP
開閉原則說的是,對擴展開放、對修改關閉。在程序須要進行擴展的時候,不能去修改原有的代碼,這也是爲了使程序的擴展性更好、易於升級和維護。
二、里氏代換原則LSP
在軟件中將一個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立。若是一個軟件實體使用的是一個子類對象的話,那麼它必定不可以使用基類對象。里氏代換原則的程序表現就是:在程序中儘可能使用基類類型來對對象進行定義,而在運行時再肯定其子類類型,用子類對象來替換父類。
三、控制反轉原則IOC
針對接口編程,依賴於抽象而不依賴於具體
四、接口隔離原則ISP
使用多個隔離的接口,比使用單個接口要好
五、迪米特法則DP
一個實體應當儘可能少地與其餘實體間發生相互做用,使得系統功能模塊相對獨立
六、合成複用原則
儘可能使用組合/聚合的方式,而不是使用繼承
設計中的三個關鍵字
一、抽象化
在衆多事物中提取出共同的、本質性的特徵,捨棄非本質的特徵,就是抽象化。抽象化的過程也是一個剪裁的過程,在抽象時,同於不一樣,取決於從什麼角度上來抽象。抽象的角度取決於分析問題的目的。
二、實現化
抽象類給出的具體實現,就是實現化。
一個類的實例就是這個類的實例化,一個具體子類是它的抽象超類的實例化。
三、解耦
這就比較重要了,平時咱們老說好的代碼應該是"高內聚、低耦合",那麼什麼是耦合呢?
所謂耦合,就是兩個實體的行爲的某種強關聯。而將它們之間的強關聯去掉,就是解耦。解耦是指將抽象化和實現化之間的耦合解開,或者說是將它們之間的強關聯改換成弱關聯。
所謂強關聯,指的是在編譯時期已經肯定的,沒法在運行時期動態改變的關聯;所謂弱關聯,就是能夠動態地肯定而且在運行時期動態改變的關聯。從這個定義看,繼承關係是強關聯,聚合關係是弱關聯。
MVC設計模式
MVC設計模式不屬於23種設計模式之一,至於爲何後面會講,可是由於這個很是常見、比較重要,就講一下。
MVC全名是Model View Controller,是模型(Model)-視圖(View)-控制器(Controller)的縮寫,一種軟件設計典範。MVC用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個不見裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。
MVC設計模式同時也提供了對HTML、CSS、JS的徹底控制,接下來看一下MVC設計模式中的幾個部分:
一、模型Model
模型標識企業數據和業務規則,在MVC的三個部件中,模型擁有最多的處理任務。被模型返回的數據是中立的,也就是說模型與數據格式無關,這樣一個模型能爲多個視圖提供數據,因爲應用於模型的代碼只需寫一次就能夠被多個視圖重用,因此減小了代碼的重複性
二、視圖View
視圖是用戶看到並與之交互的界面。對老式的Web應用程序而言,視圖就是HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演者重要的角色,可是一些新的技術已經層出不窮,包括XHTML、XML/XSL、WML等一些標識語言和Web Service。
MVC的好處是它能爲應用程序處理不少不一樣的視圖,在視圖中其實沒有真正發生處理,視圖只是做爲一種輸出數據並容許用戶操縱的方式
三、控制器Controller
控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求,因此當單機Web頁面中的超連接和發送HTML表單時,控制器自己不輸出任何東西和作任何處理,它只是接收請求並決定調用哪一個模型構件去處理請求,而後再肯定用哪一個視圖來顯示返回的數據
使用MVC分層模型有助於管理複雜的應用程序,由於開發者在一個時間內能夠專門關注某一個方面。例如,開發者能夠在不依賴業務邏輯的狀況下專一於視圖設計,同時也讓應用程序的測試更加容易。
使用MVC分層模型也簡化了分組開發,不一樣的開發人員能夠同時開發視圖、控制器邏輯和業務邏輯。
最典型的MVC就是JSP+servlet+javabean。
爲何MVC設計模式不屬於23種設計模式之一
從兩個角度看這個問題:
一、MVC設計模式咱們這麼叫,那麼MVC究竟是不是一種設計模式?或者說MVC是一種框架?框架與設計模式雖然類似,但卻有着根本的不一樣。設計模式是對在某種環境中反覆出現的問題以及解決該問題的方案的描述,它比框架更抽象;框架能夠用代碼表示,也能直接執行或複用,而對設計模式而言只有實例才能用代碼表示,設計模式是比框架更小的元素。一個框架中每每含有一個或者多個設計模式,框架老是針對某一特定應用領域,但同一設計模式卻能夠適用於各類應用。能夠說,框架是軟件,設計模式是軟件的知識;框架是大智慧,用來對軟件設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提升代碼複用率,下降耦合度。從這個角度講,MVC應屬於一種框架,而不是一種設計模式
二、第一點說了,"一個框架中每每含有一個或者多個設計模式",實際上也確實如此。《GOF》,即《設計模式》一書的做者並無把MVC說起爲一種設計模式,在他們看來,MVC實際上是其它三個景點的設計模式的演變:觀察者模式+策略模式+組合模式,根據MVC在框架中不一樣的實現可能還會用到工廠模式和裝飾器模式。比方說,model是應用的數據,view處理屏幕上展示給用戶的內容,爲此,MVC在覈心通信上基於推送/訂閱模型,當一個model變化時它對應用其餘模塊發出更新通知,訂閱者----一般是一個controller而後更新對應的view,這種天然的觀察關係促進了多個view關聯到同一個model。
===========================================================