設計模式的六大原則html
一、開閉原則(Open Close Principle):對擴展開放對修改關閉java
二、里氏代換原則(Liskov Substitution Principle):父類出現的地方,子類也可出現git
三、依賴倒轉原則(Dependence Inversion Principle):依賴抽象而不依賴具體github
四、接口隔離原則(Interface Segregation Principle):多個隔離的接口,比使用單個接口要好web
五、迪米特法則(最少知道原則)(Demeter Principle):最少知道原則。一個實體應當儘可能少的與其餘實體之間發生相互做用數據庫
六、合成複用原則(Composite Reuse Principle):儘可能使用合成/聚合的方式,而不是使用繼承。設計模式
建立型模式(五種)架構
工廠方法模式(Factory):工廠建立對象mvc
抽象工廠模式(Abstractfactory):抽象工廠實例建立對象,工廠可修改,靈活度高框架
單例模式(Sington):適用於只須要一個對象的狀況
建造者模式(Builder):建立複雜對象
原型模式(Prototype):複製對象,包括深度複製和淺度複製,深度複製重建引用對象,淺度複製不建立
結構型模式(七種)
適配器模式(Adapter):開發階段不考慮,適用於後期維護時添加功能
裝飾器模式(Decorator):擴展方法功能,可在方法執行先後加代碼
代理模式(Proxy):調用引用對象方法實現自身功能
外觀模式(Facade):CPU,內存,硬盤組裝成電腦。組裝多個對象實現自身功能。
橋接模式(Bridge):經過setXxx方法任意修改引用實例,調用一樣方法實現不一樣功能
組合模式(Composite):部分與總體,經常使用於表示樹形結構
享元模式(Flyweight):維護資源集合,經典案例:數據庫鏈接池,避免從新開啓數據庫連接的開銷
行爲型模式(十一種)
策略模式(Strategy):定義多個不一樣的實現類,這些類實現公共接口,經過調用接口調用不一樣實例獲得不一樣結果
模板方法模式(Template):父類定義公共方法,不一樣子類重寫父類抽象方法,獲得不一樣結果
觀察者模式(Observer):目標方法被調用,通知全部觀察者
迭代子模式(Interator):迭代器實現原理
責任鏈模式(ChainOfResponsibility):依次引用,依次執行
命令模式(Commond):各司其職,逐層調用,有點像三層架構
備忘錄模式(Memento):創建原始對象副本,用於存儲恢復原始對象數據
狀態模式(Stage):經過改變狀態,改變行爲
訪問者模式(Visitor):結構與操做解耦。靈活的操做,放入固定的結構中執行
中介者模式(Mediator):中介類維護對象行爲。主程序直接調用中介對象便可
解釋器模式(Iterpreter):定義解釋類,解釋包裝對象
最近又看了一遍java23種設計模式,網上不少都說java有23種設計模式,可是總感受不對,像攔截器,監聽器,過濾器,mvc難道不屬於設計模式嗎。這個問題沒多大意義,就不討論了。上次直接把這23種設計模式看完以後當時看小Demo貌似是理解了,可是怎麼也不能把23種所有背下來。最近又從新看了一遍,認真的體會了一下其中的思想。其實說這句話有些牽強了,如今的水平再怎麼認真也不能把設計模式的思想體會的淋漓盡致。此次與上次的不一樣是,幾乎不用看講解了,看代碼所有能理解小Demo的工做原理。因而試着各用一句話來總結他們。不管是深刻理解設計模式的大牛,仍是沒看過設計模式的初學者。必定會有許多人看到個人總結不知所云。我只是試着按個人思路總結一下。好讓本身容易記憶。各位也一樣能夠按本身的思路各寫一句話總結。
若是想快速瞭解一下設計模式推薦一篇博客:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html。對的,是瞭解,不是研究。我的感受設計模式並非隨隨便便給你舉個現實中的例子就可以學好的。即便例子再生動,想理解設計模式的精髓必須深刻到代碼中去。例如大多數框架開啓時用到的工廠模式;Tomcat中Pipeline中Valve的責任鏈模式調用;StandardBase中使用代理模式引入LifecycleSupport來增長自身對生命週期的管理能力;LifecycleListener中執行各個監聽器時的觀察者模式。(一直還沒時間研究SSHM源碼只看了一點Tomcat源碼只能拿Tomcat舉例了)。如今本身也只是初步知道了設計模式長什麼樣子。真的遇到了能不能認得出來還不必定,就更談不上深刻理解了。
我的認爲設計模式的學習非一朝一夕能成的東西。它是在本身作開發看源碼的工程中慢慢體會出來的。這也是本身爲何總是不更新設計模式欄帖子的緣由。寫個小案例,告訴你這叫XX模式,像這種帖子網上已經不少了,不必再重複了,以後在讀源碼的工程中遇到好的應用必定會總結到博客中的。
提供一個本身學習設計模式的思路:先看小Demo認識各類設計模式的樣子,以後在讀源碼時再慢慢理解各類設計模式的好處。並且設計模式每每還不是單獨一個出現的,例如過濾器加攔截器能實現SpringAOP的功能。知識有限能舉的例子也很少,讀源碼時注意這一點就行。
若是想看Demo能夠在網上找,也能夠在我github網址(https://github.com/smallbug-vip/repo)上獲取,其中大部分源碼仍是從上面博客中直接拷貝的。