“ 設(shè)計(jì)模式 ”是 “面向?qū)ο笤O(shè)計(jì)模式” 的簡稱傻铣,是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案章贞。
主要用來應(yīng)對(duì) 類 的變化。
“ 設(shè)計(jì)模式 ”又分為:創(chuàng)建型模式非洲、結(jié)構(gòu)型模式鸭限、行為型模式。
本文介紹的“結(jié)構(gòu)型”設(shè)計(jì)模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問題两踏。
首先是結(jié)構(gòu)型模式的幾個(gè)細(xì)分:
1.橋接模式:對(duì)象的接口與實(shí)現(xiàn)
2.適配器模式:可以將類的一個(gè)接口匹配另一個(gè)接口
3.合成模式:對(duì)象的組合
4.門面模式:一個(gè)類表示一個(gè)子系統(tǒng)
5.裝飾模式:動(dòng)態(tài)給對(duì)象添加職責(zé)
6.代理模式:一個(gè)簡單的對(duì)象代替一個(gè)復(fù)雜的稍后會(huì)被調(diào)用的復(fù)雜對(duì)象
1.橋接模式—— 適應(yīng)對(duì)象接口與實(shí)現(xiàn)的多維變化
對(duì)象的變化败京,分為:接口變化、實(shí)現(xiàn)變化梦染、屬性變化赡麦。
當(dāng)出現(xiàn)單緯度的變化時(shí)(接口變化/實(shí)現(xiàn)變化),我們通常有兩個(gè)解決放芭潦丁:水平關(guān)聯(lián)/繼承泛粹。
但是,當(dāng)多個(gè)緯度時(shí)變化時(shí)渡冻,單一的使用繼承會(huì)導(dǎo)致子類數(shù)量的快速增長戚扳,單一的使用水平關(guān)聯(lián)會(huì)導(dǎo)致擴(kuò)展性變差。
所以在適應(yīng)多維度變化時(shí)族吻,我們使用橋接模式帽借,將接口與實(shí)現(xiàn)分離。
2.適配器模式——將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口
當(dāng)原接口不可修改超歌,A和B兩個(gè)類的接口不一致砍艾,而需要將B類當(dāng)A類來使用時(shí),使用適配器模式巍举。
3.合成模式—— 將對(duì)象組合成樹形結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu)
一個(gè)樹結(jié)構(gòu)由兩種節(jié)點(diǎn)組成:樹枝節(jié)點(diǎn)和樹葉節(jié)點(diǎn)脆荷。樹枝節(jié)點(diǎn)可以有子節(jié)點(diǎn),而一個(gè)樹葉節(jié)點(diǎn)不可以有子節(jié)點(diǎn)懊悯。除了根節(jié)點(diǎn)外蜓谋,其它節(jié)點(diǎn)有且只有一個(gè)父節(jié)點(diǎn)。
當(dāng)我們需要抽象的問題炭分,同樣具又這樣的性質(zhì)的時(shí)候桃焕,就需要使用合成模式了。
例子來自:http://blog.csdn.net/koudaidai/article/details/7340192
在“故事”類中捧毛,組合一個(gè) “根節(jié)點(diǎn)類”观堂,就可以實(shí)現(xiàn)让网,故事既可以只有一重也有多重。
4.門面模式——用戶并不關(guān)注我們?nèi)绻麑懙拇a
在我們的生活中醫(yī)院就是這樣的师痕。一般的醫(yī)院都會(huì)分為掛號(hào)溃睹、門診、化驗(yàn)胰坟、收費(fèi)因篇、取藥等⊥笾看病的病人要想治好自己的蚕(相當(dāng)于一個(gè)客戶端想要實(shí)現(xiàn)自己的功能)就要和醫(yī)院的各個(gè)部門打交道。首先狠裹,病人需要掛號(hào),然后門診汽烦,如果醫(yī)生要求化驗(yàn)的話涛菠,病人就要去化驗(yàn),然后再回到門診室撇吞,最后拿藥俗冻,經(jīng)過一系列復(fù)雜的過程后才能完成看病的過程。
例子來自:http://blog.csdn.net/xingjiarong/article/details/50066133
解決這一辦法的設(shè)計(jì)是牍颈,提供一個(gè)接待員(門面模式)
用戶并不關(guān)心我們?nèi)绾螌?shí)現(xiàn)的功能迄薄,他們更希望直接使用
5.裝飾模式—— 在不必改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能
裝飾模式是在不必改變?cè)愇募褪褂美^承的情況下煮岁,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能讥蔽。它是通過創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來包裹真實(shí)的對(duì)象画机。
如果單一的使用繼承冶伞,將導(dǎo)致子類數(shù)量激增,并且只能改變單個(gè)子對(duì)象的功能步氏。
如果單一的使用水平關(guān)聯(lián)响禽,新的類與父類不再是父子關(guān)系。
6.代理模式——一個(gè)是你要訪問的對(duì)象(目標(biāo)類)荚醒,一個(gè)是代理對(duì)象
代理模式提供了對(duì)目標(biāo)對(duì)象另外的訪問方式芋类,即通過代理對(duì)象訪問目標(biāo)對(duì)象。這樣做的好處是:可以在目標(biāo)對(duì)象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對(duì)象的功能界阁。