溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

設(shè)計(jì)模式總是學(xué)不會(huì)?是時(shí)候換個(gè)姿勢(shì)了

發(fā)布時(shí)間:2020-10-01 12:19:23 來源:網(wǎng)絡(luò) 閱讀:176 作者:碼個(gè)蛋c 欄目:編程語(yǔ)言

起因

設(shè)計(jì)模式的由來

設(shè)計(jì)模式,1977 年有位美國(guó)著名建筑大師提出,他叫Christopher Alexander(克里斯托弗.亞歷山大)。他擁有劍橋大學(xué)數(shù)學(xué)碩士學(xué)位和建筑學(xué)學(xué)士學(xué)位,以及哈佛大學(xué)建筑學(xué)博士學(xué)位,有“模式它爹”的稱號(hào)。

1990 年,軟件工程界開始研討設(shè)計(jì)模式的話題。1994 年,艾瑞克·伽馬(ErichGamma)、理査德·海爾姆(Richard Helm)、拉爾夫·約翰森(Ralph Johnson)、約翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(Design Patterns: Elements of Reusable Object-Oriented Software)一書。

在本教程中收錄了 23 個(gè)設(shè)計(jì)模式,這是設(shè)計(jì)模式領(lǐng)域里程碑的事件,導(dǎo)致了軟件設(shè)計(jì)模式的突破。

這 4 位作者在軟件開發(fā)領(lǐng)域里也以他們的“四人組”(Gang of Four,GoF)匿名著稱。

什么是設(shè)計(jì)模式?

它能提高程序員的思維能力、編程能力和設(shè)計(jì)能力。

它是解決特定問題的一系列套路,有一定的普遍性。

它是一套被反復(fù)使用、多數(shù)人知曉的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。

它可以提高代碼的可重用性、代碼的可讀性和代碼的可靠性以及可擴(kuò)展性。

它能使程序設(shè)計(jì)更加標(biāo)準(zhǔn)化,使軟件開發(fā)效率大大提高,從而縮短軟件的開發(fā)周期

是它是它就是它,編程界的武林秘籍,絕世高手都練過它!

image
設(shè)計(jì)模式的分類
模式一共分為3種不同類型的模式。

創(chuàng)建型模式(Creational patterns)

提供對(duì)象創(chuàng)建機(jī)制,增加現(xiàn)有代碼的靈活性和重用。

結(jié)構(gòu)型模式(Structural patterns)

解釋如何將對(duì)象和類組裝成更大的結(jié)構(gòu),同時(shí)保持結(jié)構(gòu)的靈活性和高效性。

行為型模式(Behavioral patterns)

負(fù)責(zé)有效的溝通和對(duì)象之間的責(zé)任分配。

設(shè)計(jì)模式的七大原則
單一職責(zé)原則 (Single Responsibility Principle, SRP)

含義:一個(gè)類只負(fù)責(zé)一個(gè)功能領(lǐng)域中的相應(yīng)職責(zé)。

栗子:就像一家公司,團(tuán)隊(duì)中每個(gè)人都分工明確。有產(chǎn)品經(jīng)理,項(xiàng)目經(jīng)理,技術(shù)經(jīng)理,QA經(jīng)理等等。

好處:降低類復(fù)雜性降低,提高代碼可讀性,提高可維護(hù)性。

開閉原則 (Open-Closed Principle, OCP)

含義:軟件模塊應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。在程序需要進(jìn)行新增功能的時(shí)候,不能去修改原有的代碼,而是新增代碼。

栗子:就像插座一樣,可以給很多不同的電器充電,但是不需要改變插座本身,只要提前把插頭的規(guī)格定義好。

好處:為了使程序的擴(kuò)展性好,易于維護(hù)和升級(jí)。

里氏代換原則 (Liskov Substitution Principle, LSP)

含義:子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。

栗子:正好今天請(qǐng)我去吃小龍蝦,那就說說蝦,它是一種食品。蝦的衍生類很多有南極紅蝦、青蝦、河蝦、草蝦、對(duì)蝦、明蝦、龍蝦等,如果衍生類替換了基類的原本方法,如把食品改成了體育用品(那么軟件的基本功能受到影響),就不符合里氏代換原則。

好處:對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。

依賴倒轉(zhuǎn)原則 (Dependence Inversion Principle, DIP)

含義:高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象。針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。

栗子:以電腦為例,無論主板、CPU、內(nèi)存、硬件都是在針對(duì)接口設(shè)計(jì)的,如果出現(xiàn)某個(gè)局部的配件壞了就只要替換對(duì)應(yīng)的配件就行了。如果針對(duì)實(shí)現(xiàn)來設(shè)計(jì),那么電腦顯示屏壞了就需要把主機(jī)也一并換掉。

好處:降低模塊間的耦合。

接口隔離原則 (Interface Segregation Principle, ISP)

含義:使用多個(gè)隔離的接口,比使用單個(gè)接口要好,將臃腫龐大的接口拆分成更小的接口。

栗子:假設(shè)要設(shè)計(jì)操控機(jī)器人的接口,不能只有行動(dòng)和停止的接口,行動(dòng)可以拆分成前進(jìn),后退,轉(zhuǎn)向,跳躍,等等,接口拆分可以使組合更多。

好處:提高系統(tǒng)的靈活性和可維護(hù)性。

合成復(fù)用原則 (Composite Reuse Principle, CRP)

含義:就是能用合成/聚合的地方,絕不用繼承。盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來實(shí)現(xiàn),其次才考慮使用繼承關(guān)系來實(shí)現(xiàn)。

栗子:汽車按“動(dòng)力源”劃分可分為汽油汽車、電動(dòng)汽車等;按“顏色”劃分可分為白色汽車、黑色汽車和紅色汽車等。如果同時(shí)考慮這兩種分類,其組合就很多。

好處:提高靈活性,降低類與類之間的耦合度。

迪米特法則 (Law of Demeter, LoD)

含義:又叫最少知道原則,一個(gè)實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對(duì)獨(dú)立。

栗子:智能音箱,只需要把指令告訴智能音箱,智能音箱就會(huì)識(shí)別指令去調(diào)用各種已鏈接的電器,如:我要看湖南衛(wèi)視,把空調(diào)溫度低一點(diǎn),掃地機(jī)器人開啟清掃,等等。智能音箱幫我們解決了要找很多遙控器的煩惱。

好處:降低類之間的耦合,減少對(duì)其他類的依賴。

新手誤區(qū)
不合理的使用,這個(gè)問題很多剛學(xué)習(xí)的新手都會(huì)犯。

就像你手里有一把錘子,所有東西看上去都像釘子。

要對(duì)設(shè)計(jì)模式的使用場(chǎng)景有一定的認(rèn)識(shí)后才使用,不要濫用。

如:輸出一句“hello world”,非要強(qiáng)行給加上各種模式。

問:“為什么”,答:“總感覺少了模式!”。

有以上癥狀的,基本可以判斷中了模式的毒。

總結(jié)
本次主要學(xué)習(xí)了:

設(shè)計(jì)模式的由來,從建筑而來。

設(shè)計(jì)模式是什么,大佬的套路。

設(shè)計(jì)模式的分類,有三大分類。

設(shè)計(jì)模式的原則,有七大原則。

敲黑板:切記模式雖好,可不要濫用哦。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI