『Java設計模式』學習心得作者:板橋里人

Java提供了豐富的API,同時又有強大的資料庫系統爲我們服務(資料庫系統和面向物件的關係見我另外一文),那麽我們的編程似乎變成了積木的簡單"拼湊"和調用甚至有人提倡"藍領程式師",這些都是對現代編程技術的不瞭解所至

GoF的著名《設計模式》已經成爲掌握面向物件技術的必修課程這本書相當抽象難以相信一般"藍領程式師"能理解並能靈活應用實際上在面向物件編程中,'設計模式'爲我們提供可複用的面向物件技術再配合Refactoring(重構方法),所以很少存在簡單重復的工作加上Java代碼的精煉性和面向物件純潔性(Java和設計模式幾乎已經是渾然一體了),編程工作將變成一個讓你時刻體驗創造快感的激動人心的過程

爲能和大家能共同探討"設計模式",我將自己在學習中的心得寫下來因爲GoF的《設計模式》都是以C++爲例Java爲例的設計模式基本又都以圖形應用爲例而我們更關心Java在中間件等伺服器方面的應用因此本站所有實例都是非圖形應用並且順帶剖析Jive論壇系統同時爲降低理解難度,儘量避免使用UML

如果你有一定的面向物件編程經驗你會發現其中某些設計模式你已經無意識的使用過了;如果你是一個新手那麽從開始就培養自己良好的編程習慣(讓你的的程式使用通用的模式便於他人理解;讓你自己減少重復性的編程工作),這無疑是成爲一個優秀程式師的必備條件

整個設計模式貫穿一個原理:面對介面編程,而不是面對實現(面向物件編程應該改爲面向介面編程)目標原則是:降低耦合增強靈活性

創建模式

設計模式之Factory(工廠方法和抽象工廠)
使用工廠模式就象使用new一樣頻繁

設計模式之Prototype(原型)
用原型實例指定創建物件的種類,並且通過拷貝這些原型創建新的物件。

設計模式之Builder
汽車由車輪 方向盤 發動機很多部件組成,同時,將這些部件組裝成汽車也是一件複雜的工作,Builder模式就是將這兩種情況分開進行。

設計模式之Singleton(單態)
保證一個類只有一個實例,並提供一個訪問它的全局訪問點

結構模式

設計模式之Facade
可擴展的使用JDBC針對不同的資料庫編程,Facade提供了一種靈活的實現
設計模式之Proxy
Jive爲例,剖析代理模式在用戶級別授權機制上的應用
設計模式之Adapter
使用類再生的兩個方式:組合(new)和繼承(extends),這個已經在"thinking in java"中提到過

設計模式之Composite
就是將類用樹形結構組合成一個單位你向別人介紹你是某單位,你是單位元元中的一個元素,別人和你做買賣,相當於和單位做買賣。文章中還對Jive再進行了剖析。

設計模式之Decorator
Decorator
是個油漆工,給你的東東的外表刷上美麗的顔色

設計模式之Bridge
"牛郎織女"分開(本應在一起,分開他們,形成兩個介面),在他們之間搭建一個橋(動態的結合)

設計模式之Flyweight
提供Java運行性能,降低小而大量重復的類的開銷

 

行爲模式

設計模式之Template
實際上向你介紹了爲什麽要使用Java 抽象類,該模式原理簡單,使用很普遍

設計模式之Memento
很簡單一個模式,就是在記憶體中保留原來資料的拷貝

設計模式之Observer
介紹如何使用Java API提供的現成Observer

設計模式之Chain of Responsibility
各司其職的類串成一串,好象擊鼓傳花,當然如果自己能完成,就不要推委給下一個

設計模式之Command
什麽是將行爲封裝,Command是最好的說明

設計模式之State
狀態是編程中經常碰到的實例,將狀態物件化,設立狀態變換器,便可在狀態中輕鬆切換

設計模式之Strategy
不同演算法各自封裝,用戶端可隨意挑選需要的演算法

設計模式之Mediator
Mediator
很象十字路口的紅綠燈,每個車輛只需和紅綠燈交互就可以

設計模式之Interpreter
主要用來對語言的分析,應用機會不多

設計模式之Visitor
訪問者在進行訪問時,完成一系列實質性操作,而且還可以擴展

設計模式之Iterator
這個模式已經被用來遍曆Collection中物件使用頻率很高Java中無需專門闡述,在大多數場合也無需自己製造一個Iterator,只要將物件裝入Collection中,我們就直接可以使用Iterator模式。

 

英文資料:
英文Java設計模式下載

Overview of Design Patterns
精確定義各個模式以及他們的關係
Design Patterns Java Companion