“設(shè)計(jì)模式”學(xué)習(xí)總結(jié)

【學(xué)習(xí)總結(jié)】

學(xué)習(xí)的效果很多時候依賴于自身的一個學(xué)習(xí)“態(tài)度”礁阁。以自己為例子靠欢,我是一個不斷追求自我認(rèn)知的人薪缆,因?yàn)槲铱释麑ψ约喝松摹爸鲃有浴保蚁矚g這種感覺沧侥。所以,我需要掌握各種“思維模式”來增加對自我的理性認(rèn)知宴杀,從而提高自己更加“主動”的可能性癣朗。帶著這樣一個心態(tài)去學(xué)習(xí),我就很容易“入戲”旺罢,并不會感到厭倦旷余,而且持續(xù)在自己身上學(xué)以致用绢记。“設(shè)計(jì)模式”本身就是一種思維模式正卧,在設(shè)計(jì)領(lǐng)域它還是我們在相互分享交流的一種共通規(guī)范性語言蠢熄,在我們相互分享理念的時候起了很大的作用,例如在開源的代碼上使用這種“共性規(guī)范”更容易讓大家對這種抽象思維的理解穗酥,大大降低了代碼之間的溝通成本护赊。

【學(xué)習(xí)建議】

越高級,越抽象砾跃;越抽象,越基礎(chǔ)节吮;越基礎(chǔ)抽高,越忽視;越忽視透绩,越浮躁......強(qiáng)烈建議自己系統(tǒng)性地結(jié)合實(shí)踐(Java設(shè)計(jì)實(shí)踐)親自行動看一遍翘骂,寫一遍,畫一遍帚豪。

設(shè)計(jì)模式歸類

“創(chuàng)建型”設(shè)計(jì)模式

1碳竟、單例模式(Singleton)?

“單例模式”UML類圖

【模式定義】

確保一個類只有一個實(shí)例颓鲜,并提供一個全局訪問點(diǎn)腋么。

【案例場景】

● java.lang.Runtime#getRuntime()

2、構(gòu)建模式(Builder)?

“構(gòu)建模式”UML類圖

【模式定義】

主要用來簡化一個復(fù)雜的對象的創(chuàng)建尼荆。

【案例場景】

● java.lang.StringBuilder#append()

●?java.lang.StringBuffer#append()

●?java.sql.PreparedStatement

3烛亦、原型模式(Prototype)?

“原型模式”UML類圖

【模式定義】

當(dāng)創(chuàng)建給定類的實(shí)例的過程很昂貴或很復(fù)雜時诈泼,就使用原型模式。

【案例場景】

●?java.lang.Object#clone()

●?java.lang.Cloneable

4煤禽、抽象工廠模式(Abstract Factory)?

“抽象工廠模式”UML類圖

【模式定義】

提供一個接口铐达,用于創(chuàng)建相關(guān)或依賴對象的家族,而不需要明確指定具體類檬果。

【案例場景】

●?java.util.Calendar#getInstance()

●?java.sql.DriverManager#getConnection()

●?java.sql.Connection#createStatement()

●?java.text.NumberFormat#getInstance()

5瓮孙、工廠方法模式(Factory Method)?

“工廠方法模式”UML類圖

【模式定義】

定義了一個創(chuàng)建對象接口,但由子類決定實(shí)例化的類是哪一個选脊,工廠方法讓類把實(shí)例化推遲到子類杭抠。

【案例場景】

●?java.lang.Proxy#newProxyInstance()

●?java.lang.reflect.Array#newInstance()

●?java.lang.reflect.Constructor#newInstance()

●?java.lang.Class#forName()

“行為型”設(shè)計(jì)模式

1、策略模式(Strategy)?

“策略模式”UML類圖

【模式定義】

定義了算法族知牌,分別封裝起來祈争,讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶角寸。

【案例場景】

●?java.util.Comparator#compare()

●?javax.servlet.http.HttpServlet

●?javax.servlet.Filter#doFilter()

2菩混、狀態(tài)模式(State)?

“狀態(tài)模式”UML類圖

【模式定義】

允許對象在內(nèi)部狀態(tài)改變時改變它的行為忿墅,對象看起來好像修改了它的類。

【案例場景】

●?java.util.Iterator

3沮峡、命令模式(Command)?

“命令模式”UML類圖

【模式定義】

將“請求”封裝成對象疚脐,以便使用不同的請求、隊(duì)列或者日志來參數(shù)化其他對象邢疙。命令模式也支持可撤銷的操作棍弄。

【案例場景】

●?java.lang.Runnable

4、觀察者模式(Observer)?

“觀察者模式”UML類圖

【模式定義】

定義了對象之間的一對多依賴疟游,這樣一來呼畸,當(dāng)一個對象改變狀態(tài)時,它的所有依賴者都會收到通知并自動更新颁虐。

【案例場景】

●?java.util.EventListener

●?javax.servlet.http.HttpSessionAttributeListener

5蛮原、迭代器模式(Iterator)?

“迭代器模式”UML類圖

【模式定義】

提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內(nèi)部的表示另绩。

【案例場景】

●?java.util.Iterator

●?java.util.Enumeration

6儒陨、模板方法模式(Template Method)?

“模板方法模式”UML類圖

【模式定義】

在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中笋籽。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下蹦漠,重新定義算法中的某些步驟。

【案例場景】

●?java.util.Collections#sort()

●?java.io.InputStream#read()

7车海、訪問者模式(Visitor)?

“訪問者模式”UML類圖

【模式定義】

當(dāng)你想要為一個對象的組合增加新的能力笛园,且封裝并不重要時,就使用訪問者模式容劳,主要意圖是將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作分離喘沿。

【案例場景】

●?javax.lang.model.element.Element & javax.lang.model.element.ElementVisitor

●?javax.lang.model.type.TypeMirror & javax.lang.model.type.TypeVisitor

8、中介者模式(Mediator)?

“中介者模式”UML類圖

【模式定義】

使用中介者模式來集中相關(guān)對象之間復(fù)雜的溝通和控制方式竭贩。

【案例場景】

●?java.util.Timer

●?java.util.concurrent.Executor#execute()

9蚜印、責(zé)任鏈模式(Chain of Responsibility)?

“責(zé)任鏈模式”UML類圖

【模式定義】

當(dāng)你想要讓一個以上的對象有機(jī)會能夠處理某個請求的時候,就使用責(zé)任鏈模式留量。

【案例場景】

●?java.util.logging.Logger#log()

●?javax.servlet.Filter#doFilter()

10窄赋、解釋器模式(Interpreter)?

“解釋器模式”UML類圖

【模式定義】

使用解釋器模式為語言創(chuàng)建解釋器。

【案例場景】

●?java.util.Pattern

●?java.text.Format

11楼熄、備忘錄模式(Memento)?

“備忘錄模式”UML類圖

【模式定義】

當(dāng)你需要讓對象返回之前的狀態(tài)時忆绰,(例如,你的用戶請求“撤銷”)可岂,就使用備忘錄模式错敢。

【案例場景】

●?java.util.Date

●?java.io.Serializable

“結(jié)構(gòu)型”設(shè)計(jì)模式

1、裝飾者模式(Decorator)?

“裝飾者模式”UML類圖

【模式定義】

動態(tài)地將責(zé)任附加到對象上,若要擴(kuò)展功能稚茅,裝飾者提供了比繼承更有彈性的替代方案纸淮。

【案例場景】

●?java.io.BufferedInputStream(InputStream)

●?java.io.DataInputStream(InputStream)

●?java.io.BufferedOutputStream(OutputStream)

2、外觀模式(Facade)?

“外觀者模式”UML類圖

【模式定義】

用一個簡單的接口包狀一組組件亚享,接口咽块,抽象或是子系統(tǒng)。

【案例場景】

●?java.lang.Class

●?javax.faces.webapp.FacesServlet

3欺税、適配器模式(Adapter)?

“適配器模式”UML類圖

【模式定義】

將一個類的接口侈沪,轉(zhuǎn)換成客戶期望的另一個接口,適配器讓原本接口不兼容的類可以合作無間晚凿。

【案例場景】

●?java.util.Arrays#asList()

●?java.io.InputStreamReader(InputStream)

●?java.io.OutputStreamWriter(OutputStream)

4亭罪、代理模式(Proxy)?

“代理模式”UML類圖

【模式定義】

為另一個對象提供一個替身或占位符以控制對這個對象的訪問。

【案例場景】

●?java.lang.reflect.Proxy

●?RMI

5歼秽、組合模式(Composite)?

“組合模式”UML類圖

【模式定義】

允許你將對象組合成樹形結(jié)構(gòu)來表現(xiàn)“整體/部分”層次結(jié)構(gòu)皆撩,組合能讓客戶以一致的方式處理個別對象以及對象組合。

【案例場景】

●?java.util.Map#putAll(Map)

●?java.util.List#addAll(Collection)

●?java.util.Set#addAll(Collection)

6哲银、橋接模式(Bridge)?

“橋接模式”UML類圖

【模式定義】

使用橋接模式不只改變你的實(shí)現(xiàn),也改變你的抽閑呻惕。

【案例場景】

● JDBC

7荆责、蠅量模式(Flyweight)?

“蠅量模式”UML類圖

【模式定義】

有效率地存儲大量的小的對象。

【案例場景】

● java.lang.Integer#valueOf(int)

●?java.lang.Boolean#valueOf(boolean)

●?java.lang.Byte#valueOf(byte)

●?java.lang.Character#valueOf(char)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亚脆,一起剝皮案震驚了整個濱河市做院,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌濒持,老刑警劉巖键耕,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柑营,居然都是意外死亡屈雄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門官套,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酒奶,“玉大人,你說我怎么就攤上這事奶赔⊥锖浚” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵站刑,是天一觀的道長另伍。 經(jīng)常有香客問我,道長绞旅,這世上最難降的妖魔是什么摆尝? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任温艇,我火速辦了婚禮,結(jié)果婚禮上结榄,老公的妹妹穿的比我還像新娘中贝。我一直安慰自己,他們只是感情好臼朗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布邻寿。 她就那樣靜靜地躺著,像睡著了一般视哑。 火紅的嫁衣襯著肌膚如雪绣否。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天挡毅,我揣著相機(jī)與錄音蒜撮,去河邊找鬼。 笑死跪呈,一個胖子當(dāng)著我的面吹牛段磨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耗绿,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼苹支,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了误阻?” 一聲冷哼從身側(cè)響起债蜜,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎究反,沒想到半個月后寻定,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡精耐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年狼速,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黍氮。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡唐含,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沫浆,到底是詐尸還是另有隱情捷枯,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布专执,位于F島的核電站淮捆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攀痊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一桐腌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苟径,春花似錦案站、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遭殉,卻和暖如春石挂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背险污。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工痹愚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛔糯。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓拯腮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚁飒。 傳聞我的和親對象是個殘疾皇子疾瓮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容