設計模式老是學不會?是時候換個姿式了

原由

設計模式的由來

設計模式,1977 年有位美國著名建築大師提出,他叫Christopher Alexander(克里斯托弗.亞歷山大)。他擁有劍橋大學數學碩士學位和建築學學士學位,以及哈佛大學建築學博士學位,有「模式它爹」的稱號。程序員

1990 年,軟件工程界開始研討設計模式的話題。1994 年,艾瑞克·伽馬(ErichGamma)、理査德·海爾姆(Richard Helm)、拉爾夫·約翰森(Ralph Johnson)、約翰·威利斯迪斯(John Vlissides)等 4 位做者合做出版了《設計模式:可複用面向對象軟件的基礎》(Design Patterns: Elements of Reusable Object-Oriented Software)一書。編程

在本教程中收錄了 23 個設計模式,這是設計模式領域裏程碑的事件,致使了軟件設計模式的突破。設計模式

這 4 位做者在軟件開發領域裏也以他們的「四人組」(Gang of Four,GoF)匿名著稱。ide

什麼是設計模式?

它能提升程序員的思惟能力、編程能力和設計能力。學習

它是解決特定問題的一系列套路,有必定的廣泛性。設計

它是一套被反覆使用、多數人知曉的、代碼設計經驗的總結。3d

它能夠提升代碼的可重用性、代碼的可讀性和代碼的可靠性以及可擴展性。cdn

它能使程序設計更加標準化,使軟件開發效率大大提升,從而縮短軟件的開發週期對象

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

設計模式的分類

模式一共分爲3種不一樣類型的模式。

建立型模式(Creational patterns)

提供對象建立機制,增長現有代碼的靈活性和重用。

結構型模式(Structural patterns)

解釋如何將對象和類組裝成更大的結構,同時保持結構的靈活性和高效性。

行爲型模式(Behavioral patterns)

負責有效的溝通和對象之間的責任分配。

設計模式的七大原則

單一職責原則 (Single Responsibility Principle, SRP)

含義:一個類只負責一個功能領域中的相應職責。

栗子:就像一家公司,團隊中每一個人都分工明確。有產品經理,項目經理,技術經理,QA經理等等。

好處:下降類複雜性下降,提升代碼可讀性,提升可維護性。

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

含義:軟件模塊應該對擴展開放,對修改關閉。在程序須要進行新增功能的時候,不能去修改原有的代碼,而是新增代碼。

栗子:就像插座同樣,能夠給不少不一樣的電器充電,可是不須要改變插座自己,只要提早把插頭的規格定義好。

好處:爲了使程序的擴展性好,易於維護和升級。

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

含義:子類能夠擴展父類的功能,但不能改變父類原有的功能。

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

好處:對實現抽象化的具體步驟的規範。

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

含義:高層模塊不該該依賴低層模塊,兩者都應該依賴其抽象。針對接口編程,而不是針對實現編程。

栗子:以電腦爲例,不管主板、CPU、內存、硬件都是在針對接口設計的,若是出現某個局部的配件壞了就只要替換對應的配件就好了。若是針對實現來設計,那麼電腦顯示屏壞了就須要把主機也一併換掉。

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

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

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

栗子:假設要設計操控機器人的接口,不能只有行動和中止的接口,行動能夠拆分紅前進,後退,轉向,跳躍,等等,接口拆分可使組合更多。

好處:提升系統的靈活性和可維護性。

合成複用原則 (Composite Reuse Principle, CRP)

含義:就是能用合成/聚合的地方,毫不用繼承。儘可能先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。

栗子:汽車按「動力源」劃分可分爲汽油汽車、電動汽車等;按「顏色」劃分可分爲白色汽車、黑色汽車和紅色汽車等。若是同時考慮這兩種分類,其組合就不少。

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

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

含義:又叫最少知道原則,一個實體應當儘可能少的與其餘實體之間發生相互做用,使得系統功能模塊相對獨立。

栗子:智能音箱,只須要把指令告訴智能音箱,智能音箱就會識別指令去調用各類已連接的電器,如:我要看湖南衛視,把空調溫度低一點,掃地機器人開啓清掃,等等。智能音箱幫咱們解決了要找不少遙控器的煩惱。

好處:下降類之間的耦合,減小對其餘類的依賴。

新手誤區

不合理的使用,這個問題不少剛學習的新手都會犯。

就像你手裏有一把錘子,全部東西看上去都像釘子。

要對設計模式的使用場景有必定的認識後才使用,不要濫用。

如:輸出一句「hello world」,非要強行給加上各類模式。

問:「爲何」,答:「總感受少了模式!」。

有以上症狀的,基本能夠判斷中了模式的毒。

總結

本次主要學習了:

設計模式的由來,從建築而來。

設計模式是什麼,大佬的套路。

設計模式的分類,有三大分類。

設計模式的原則,有七大原則。

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

相關文章
相關標籤/搜索