自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

設計模式總是學不會?換個姿勢再學一次!

開發(fā) 后端
1977 年有位美國著名建筑大師提出,他叫Christopher Alexander(克里斯托弗.亞歷山大)。他擁有劍橋大學數(shù)學碩士學位和建筑學學士學位,以及哈佛大學建筑學博士學位,有“模式它爹”的稱號。

[[340497]]

 本文轉(zhuǎn)載自微信公眾號「碼個蛋」,作者 陳宇明。轉(zhuǎn)載本文請聯(lián)系碼個蛋公眾號。

起因

 

設計模式的由來

 

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

[[340503]]

 

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

 

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

[[340504]]

 

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

 

什么是設計模式?

  • 簡單來說就是一本編程界的如來神掌。
  •  
  • 它能提高程序員的思維能力、編程能力和設計能力。
  • 它是解決特定問題的一系列套路,有一定的普遍性。
  • 它是一套被反復使用、多數(shù)人知曉的、代碼設計經(jīng)驗的總結(jié)。
  • 它可以提高代碼的可重用性、代碼的可讀性和代碼的可靠性以及可擴展性。
  • 它能使程序設計更加標準化,使軟件開發(fā)效率提高,從而縮短軟件的開發(fā)周期。

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

 

設計模式的分類

模式一共分為3種不同類型的模式。

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

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

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

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

行為型模式(Behavioral patterns)

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

別問為什么是粉紅色

 

設計模式的七大原則

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

含義:一個類只負責一個功能領(lǐng)域中的相應職責。

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

[[340509]]

 

好處:降低類復雜性降低,提高代碼可讀性,提高可維護性。

 

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

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

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

[[340511]]

 

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

 

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

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

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

 

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

 

 

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

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

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

 

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

 

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

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

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

[[340515]]

 

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

 

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

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

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

[[340517]]

 

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

 

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

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

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

[[340519]]

 

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

 

新手誤區(qū)

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

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

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

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

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

 

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

 

總結(jié)

本次主要學習了:

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

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

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

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

 

責任編輯:武曉燕 來源: 碼個蛋
相關(guān)推薦

2018-09-03 11:57:28

大數(shù)據(jù)存儲Spark

2021-02-16 00:33:56

Python語言工具

2017-01-23 12:40:45

設計演講報表數(shù)據(jù)

2019-05-30 15:20:04

webpack前端開發(fā)

2022-01-26 11:14:32

Vim編輯器Linux

2011-06-28 10:41:50

DBA

2021-12-27 10:08:16

Python編程語言

2020-10-24 13:50:59

Python編程語言

2024-06-07 08:47:00

2011-05-31 14:18:54

橫屏UI設計

2010-02-26 09:29:15

2020-10-18 12:53:29

黑科技網(wǎng)站軟件

2020-03-18 13:07:16

華為

2020-03-10 07:51:35

面試諷刺標準

2020-06-24 09:00:43

分庫分表MySQL

2020-07-16 09:07:19

LVS硬件服務器

2013-06-03 09:28:49

游戲設計

2024-05-31 12:56:06

.NET代碼方法

2011-04-18 13:36:42

2021-03-02 20:42:20

實戰(zhàn)策略
點贊
收藏

51CTO技術(shù)棧公眾號