設(shè)計(jì)模式-前言

一、什么是設(shè)計(jì)模式?
什么樣的程序員是一個(gè)好的程序員?學(xué)會(huì)很多門編程語(yǔ)言,就是一個(gè)好的程序員了么?事實(shí)上,學(xué)會(huì)一門編程語(yǔ)言不是一件很難的事,而“學(xué)會(huì)”一門編程語(yǔ)言是非常難的一件事。前一個(gè)“會(huì)”強(qiáng)調(diào)“能”,懂語(yǔ)法,能寫簡(jiǎn)單的程序就算是前者的“會(huì)”了;后一個(gè)“會(huì)”,強(qiáng)調(diào)“精”,顯然,光能寫出“Hello World”并不算是后者的“會(huì)”,能熟練應(yīng)用,并用編程語(yǔ)言解決各種問(wèn)題,才算是真正的“會(huì)”。編程語(yǔ)言就像是世界上任何有意義的東西一樣,它在一直變化,一直進(jìn)化,此刻學(xué)會(huì)的編程語(yǔ)言,到了下一刻,就可能有新東西出來(lái),跟上它進(jìn)步的節(jié)奏,本身就是一件非常費(fèi)精力的事,更別說(shuō)去在這個(gè)基礎(chǔ)上,去“會(huì)”第二門編程語(yǔ)言了。因而,個(gè)人認(rèn)為,使用過(guò)很多種的編程語(yǔ)言,并不是成為一個(gè)好的程序員的充分條件。一個(gè)好的程序員,更多的體現(xiàn)不應(yīng)該在他會(huì)使用多少“工具”,而是他能使用這些“工具”,創(chuàng)造多么大的成績(jī),解決多么大的問(wèn)題。掌握解決問(wèn)題的方法,能用自己精通的編程語(yǔ)言解決各種問(wèn)題,這才是成為一個(gè)優(yōu)秀程序所必備的。
正因?yàn)槿绱?,我們才需要學(xué)習(xí)設(shè)計(jì)模式。設(shè)計(jì)模式是面對(duì)各種問(wèn)題進(jìn)行提煉和抽象而形成的解決方案。這些設(shè)計(jì)方案是前人不斷試驗(yàn),考慮了封裝性、復(fù)用性、效率、可修改、可移植等各種因素的高度總結(jié)。它不限于一種特定的語(yǔ)言,它是一種解決問(wèn)題的思想和方法。

二、設(shè)計(jì)模式的意義
現(xiàn)在社會(huì)的發(fā)展可謂突飛猛進(jìn),過(guò)去常常被當(dāng)作軟件行業(yè)標(biāo)桿的“軟件工程”設(shè)計(jì)模型,逐漸讓出了它的半壁江山,給了一種叫作“敏捷開(kāi)發(fā)、快速迭代”的軟件開(kāi)發(fā)方式。快速迭代的環(huán)境下,需求就顯得不那么明確,需求常常伴隨著整個(gè)項(xiàng)目的進(jìn)行而變化。需求的不確定性,對(duì)程序編寫的要求就會(huì)比較高了。首先要考慮各種可能需求的兼容,但考慮的需求越多,就很容易陷入整個(gè)軟件架構(gòu)設(shè)計(jì)的深淵,不可自拔。設(shè)計(jì)模式對(duì)需求變更與代碼重用的考慮,可以被作為軟件設(shè)計(jì)的參考,由于設(shè)計(jì)模式基本上本著“高內(nèi)聚、低耦合”的原則,遵循設(shè)計(jì)模式而設(shè)計(jì)的代碼結(jié)構(gòu),常常會(huì)有著對(duì)需求的適應(yīng)性。
一個(gè)大型的軟件項(xiàng)目,不可能由一個(gè)人完成,此類項(xiàng)目常常需要多個(gè)軟件開(kāi)發(fā)工程師的協(xié)同開(kāi)發(fā)。既然是協(xié)同開(kāi)發(fā),就一定會(huì)涉及到模塊間的相互影響,一個(gè)工程師編寫的一行代碼,可能會(huì)影響到其它工程師代碼的諸多因子。如果工程師之間的相互影響過(guò)大,那么整個(gè)項(xiàng)目無(wú)法形成合力,也就無(wú)法按時(shí)保質(zhì)完成。最理想的情況下,一個(gè)工程師的代碼不要影響到別人的模塊,但有時(shí),又不得不去借用或者被借到其它模塊。這其中的組織,也是需要智慧的。設(shè)計(jì)模式同樣可以作為協(xié)同作業(yè)的參考,遵循設(shè)計(jì)模式而設(shè)計(jì)的代碼結(jié)構(gòu),盡可能地減少模塊間的不必要依賴,在協(xié)同工作條件下,對(duì)項(xiàng)目的有序進(jìn)行有著非常大的幫助。
公司人事會(huì)有變動(dòng),程序員也會(huì)成長(zhǎng)。不管是哪種情況,代碼非常有可能會(huì)被移交,即代碼的編寫者和維護(hù)者很有可能會(huì)是不同的人。那么代碼的可讀性就顯得非常重要了。由于高級(jí)語(yǔ)言的出現(xiàn),讓機(jī)器讀懂你的意圖已經(jīng)不是最主要的“矛盾”,而讓人讀懂你的意圖才是最重要。按照設(shè)計(jì)模式編寫的代碼,其可讀性也會(huì)大大提升,利于團(tuán)隊(duì)項(xiàng)目的繼承和擴(kuò)展。

三、有哪些設(shè)計(jì)模式?
設(shè)計(jì)模式可以分為三個(gè)大類:

  • 創(chuàng)建類設(shè)計(jì)模式
  • 結(jié)構(gòu)類設(shè)計(jì)模式
  • 行為類設(shè)計(jì)模式

創(chuàng)建類設(shè)計(jì)模式可以分為

  • 單例模式
  • 工廠模式
  • 抽象工廠模式
  • 原型模式
  • 建造者模式

結(jié)構(gòu)類設(shè)計(jì)模式可以分為

  • 裝飾器模式
  • 適配器模式
  • 門面模式
  • 組合模式
  • 享元模式
  • 橋梁模式

行為類設(shè)計(jì)模式可以細(xì)分為

  • 策略模式
  • 責(zé)任鏈模式
  • 命令模式
  • 中介者模式
  • 模板模式
  • 迭代器模式
  • 訪問(wèn)者模式
  • 觀察者模式
  • 解釋器模式
  • 備忘錄模式
  • 狀態(tài)模式

四、設(shè)計(jì)模式與架構(gòu)、框架的關(guān)系
1、軟件框架與設(shè)計(jì)模式的關(guān)系
軟件框架隨著軟件工程的發(fā)展而出現(xiàn),所謂的軟件框架,是提取了特定領(lǐng)域的軟件的共性部分所形成的軟件體系,它并不是一個(gè)成熟的軟件,而更像是一個(gè)“半成品”,程序員在框架之上,可以很方便地某些特定領(lǐng)域?qū)崿F(xiàn)又快又可靠的二次開(kāi)發(fā)。
設(shè)計(jì)模式和軟件框架在軟件設(shè)計(jì)中是兩個(gè)不同的研究領(lǐng)域:A、設(shè)計(jì)模式如前邊的定義所講,它指的是針對(duì)一類問(wèn)題的解決方法,一個(gè)設(shè)計(jì)模式可應(yīng)用于不同的框架和被不同的語(yǔ)言所實(shí)現(xiàn);而框架則是一個(gè)應(yīng)用的體系結(jié)構(gòu),是一種或多種設(shè)計(jì)模式和代碼的混合體;B、設(shè)計(jì)模式相較于框架更容易移植,并且可以用各種語(yǔ)言實(shí)現(xiàn),而軟件框架則受限于領(lǐng)域大環(huán)境。雖然設(shè)計(jì)模式和軟件框架有很多不同,但在某些方面他們二者是統(tǒng)一的,即重視軟件復(fù)用,提高開(kāi)發(fā)效率。

2、軟件架構(gòu)與設(shè)計(jì)模式的關(guān)系
軟件架構(gòu)是個(gè)比較大的概念,架構(gòu)要考慮軟件的整體結(jié)構(gòu)、層次劃分以及不同部分間的協(xié)作和交互等,架構(gòu)的著眼點(diǎn)偏整體。相比之下,框架和設(shè)計(jì)模式的范圍則具體很多,框架著眼于領(lǐng)域內(nèi)的解決方法,而設(shè)計(jì)模式則針對(duì)一類問(wèn)題的解決方案和設(shè)計(jì)思路。
總體來(lái)說(shuō),軟件架構(gòu)可以由不同的框架和不同的設(shè)計(jì)模式,再加上特定的構(gòu)件組合來(lái)實(shí)現(xiàn);框架可以根據(jù)設(shè)計(jì)模式結(jié)合特定編程語(yǔ)言和環(huán)境來(lái)實(shí)現(xiàn)。設(shè)計(jì)模式就是解決單一問(wèn)題的設(shè)計(jì)思路和解決方法。

五、這個(gè)專題主要是會(huì)介紹幾大部分:
1)通過(guò)理解各個(gè)設(shè)計(jì)模式的含義以及相關(guān)例子來(lái)更好的讓讀者在日常開(kāi)發(fā)中使用優(yōu)秀合適的設(shè)計(jì)模式。
2)通過(guò)分析一些優(yōu)秀的框架源碼,來(lái)看看具體這些設(shè)計(jì)模式是如何使用起來(lái)的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容