溫馨提示×

溫馨提示×

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

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

軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式分為哪些類型

發(fā)布時(shí)間:2022-09-26 09:51:33 來源:億速云 閱讀:118 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式分為哪些類型”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式分為哪些類型”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

一、軟件設(shè)計(jì)七大原則

無論是在我們學(xué)習(xí)設(shè)計(jì)模式的過程中,還是日常的開發(fā)過程中,都要遵循一套統(tǒng)一的軟件設(shè)計(jì)原則。

在常見的設(shè)計(jì)原則中,一共是7 種設(shè)計(jì)原則,它們分別為開閉原則、里氏替換原則、依賴倒置原則、單一職責(zé)原則、接口隔離原則、迪米特法則和合成復(fù)用原則。

各種各樣的原則最終目的只有一句話,也是軟件開發(fā)人員聽過的最多的一句話:高內(nèi)聚、低耦合,提高復(fù)用性、可擴(kuò)展性、可維護(hù)性。

設(shè)計(jì)原則一句話歸納目的
開閉原則對擴(kuò)展開放,對修改關(guān)閉降低維護(hù)帶來的新風(fēng)險(xiǎn)
依賴倒置原則高層不應(yīng)該依賴低層,要面向接口編程更利于代碼結(jié)構(gòu)的升級擴(kuò)展
單一職責(zé)原則一個(gè)類只干一件事,實(shí)現(xiàn)類要單一便于理解,提高代碼的可讀性
接口隔離原則一個(gè)接口只干一件事,接口要精簡單一功能解耦,高聚合、低耦合
迪米特法則不該知道的不要知道,一個(gè)類應(yīng)該保持對其它對象最少的了解,降低耦合度只和朋友交流,不和陌生人說話,減少代碼臃腫
里氏替換原則不要破壞繼承體系,子類重寫方法功能發(fā)生改變,不應(yīng)該影響父類方法的含義防止繼承泛濫
合成復(fù)用原則盡量使用組合或者聚合關(guān)系實(shí)現(xiàn)代碼復(fù)用,少使用繼承降低代碼耦合

這些原則在我們開發(fā)過程中或多或少的都有體現(xiàn),比如在我們的項(xiàng)目中業(yè)務(wù)層總是定義Service接口,在Impl中實(shí)現(xiàn)具體的邏輯,很多開發(fā)只是照葫蘆畫瓢,卻并不知道為什么要這樣做,結(jié)合開發(fā)原則讀者可以仔細(xì)想一下為什么要這樣做。

還有一個(gè)典型的用法,我們定義的實(shí)體類的成員變量,總是用private修飾,然后定義get和set方法去操作這些成員變量,那為什么不直接把成員變量定義public,直接操作成員變量呢。

軟件設(shè)計(jì)原則在我們的開發(fā)中處處體現(xiàn),在一些代碼習(xí)慣上多思考,做到知其然知其所以然。

二、設(shè)計(jì)模式分類

在設(shè)計(jì)模式學(xué)習(xí)過程中可以查閱該文檔,學(xué)習(xí)每個(gè)設(shè)計(jì)模式時(shí),對于他的作用和分類能做到心中有數(shù)。

1、創(chuàng)建型

創(chuàng)建型模式的主要關(guān)注點(diǎn)是“怎樣創(chuàng)建對象?”,它的主要特點(diǎn)是“將對象的創(chuàng)建與使用分離”。

  • 單例(Singleton)模式:某個(gè)類只能生成一個(gè)實(shí)例,該類提供了一個(gè)全局訪問點(diǎn)供外部獲取該實(shí)例,其拓展是有限多例模式。

  • 原型(Prototype)模式:將一個(gè)對象作為原型,通過對其進(jìn)行復(fù)制而克隆出多個(gè)和原型類似的新實(shí)例。

  • 工廠方法(FactoryMethod)模式:定義一個(gè)用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品。

  • 抽象工廠(AbstractFactory)模式:提供一個(gè)創(chuàng)建產(chǎn)品族的接口,其每個(gè)子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品。

  • 建造者(Builder)模式:將一個(gè)復(fù)雜對象分解成多個(gè)相對簡單的部分,然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對象。

2、結(jié)構(gòu)型

結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu)。它分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式,前者采用繼承機(jī)制來組織接口和類,后者釆用組合或聚合來組合對象。

  • 代理(Proxy)模式:為某對象提供一種代理以控制對該對象的訪問。即客戶端通過代理間接地訪問該對象,從而限制、增強(qiáng)或修改該對象的一些特性。

  • 適配器(Adapter)模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。

  • 橋接(Bridge)模式:將抽象與實(shí)現(xiàn)分離,使它們可以獨(dú)立變化。它是用組合關(guān)系代替繼承關(guān)系來實(shí)現(xiàn)的,從而降低了抽象和實(shí)現(xiàn)這兩個(gè)可變維度的耦合度。

  • 裝飾(Decorator)模式:動(dòng)態(tài)地給對象增加一些職責(zé),即增加其額外的功能。

  • 外觀(Facade)模式:為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,使這些子系統(tǒng)更加容易被訪問。

  • 享元(Flyweight)模式:運(yùn)用共享技術(shù)來有效地支持大量細(xì)粒度對象的復(fù)用。

  • 組合(Composite)模式:將對象組合成樹狀層次結(jié)構(gòu),使用戶對單個(gè)對象和組合對象具有一致的訪問性。

3、行為型

行為型模式用于描述程序在運(yùn)行時(shí)復(fù)雜的流程控制,即描述多個(gè)類或?qū)ο笾g怎樣相互協(xié)作共同完成單個(gè)對象都無法單獨(dú)完成的任務(wù),它涉及算法與對象間職責(zé)的分配。

行為型模式分為類行為模式和對象行為模式,前者采用繼承機(jī)制來在類間分派行為,后者采用組合或聚合在對象間分配行為。由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象行為模式比類行為模式具有更大的靈活性。

  • 模板方法(Template Method)模式:定義一個(gè)操作中的算法骨架,將算法的一些步驟延遲到子類中,使得子類在可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。

  • 策略(Strategy)模式:定義了一系列算法,并將每個(gè)算法封裝起來,使它們可以相互替換,且算法的改變不會(huì)影響使用算法的客戶。

  • 命令(Command)模式:將一個(gè)請求封裝為一個(gè)對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開。

  • 職責(zé)鏈(Chain of Responsibility)模式:把請求從鏈中的一個(gè)對象傳到下一個(gè)對象,直到請求被響應(yīng)為止。通過這種方式去除對象之間的耦合。

  • 狀態(tài)(State)模式:允許一個(gè)對象在其內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為能力。

  • 觀察者(Observer)模式:多個(gè)對象間存在一對多關(guān)系,當(dāng)一個(gè)對象發(fā)生改變時(shí),把這種改變通知給其他多個(gè)對象,從而影響其他對象的行為。

  • 中介者(Mediator)模式:定義一個(gè)中介對象來簡化原有對象之間的交互關(guān)系,降低系統(tǒng)中對象間的耦合度,使原有對象之間不必相互了解。

  • 迭代器(Iterator)模式:提供一種方法來順序訪問聚合對象中的一系列數(shù)據(jù),而不暴露聚合對象的內(nèi)部表示。

  • 訪問者(Visitor)模式:在不改變集合元素的前提下,為一個(gè)集合中的每個(gè)元素提供多種訪問方式,即每個(gè)元素有多個(gè)訪問者對象訪問。

  • 備忘錄(Memento)模式:在不破壞封裝性的前提下,獲取并保存一個(gè)對象的內(nèi)部狀態(tài),以便以后恢復(fù)它。

  • 解釋器(Interpreter)模式:提供如何定義語言的文法,以及對語言句子的解釋方法,即解釋器。

三、UML詳解

UML類圖摘抄自大話設(shè)計(jì)模式,我目前見過最好的一張圖,便于讀者理解。

軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式分為哪些類型

在面向?qū)ο蟮氖澜缰?,包含了對象和接口,UML類圖主要是能表達(dá)出來對象和接口的表現(xiàn)和他們的關(guān)系。

對象和接口都是采用矩形框表示,因?yàn)閷ο蟀惷?、成員變量、成員方法所以用三層來表示,接口沒有成員變量,所以采用兩層來表示,為了更易于區(qū)分在接口名上《interface》,另外,抽象類用斜體表示。成員變量均有關(guān)鍵詞修飾,+代表public、-代表private、#代表protected

接下來說明類與類、接口與類之間關(guān)系的表達(dá)。

繼承,空心三角形+實(shí)線

實(shí)現(xiàn)接口,空心三角形+虛線

關(guān)聯(lián),實(shí)線。企鵝和氣候。

聚合,菱形+實(shí)現(xiàn)箭頭。雁群和大雁。

依賴,虛線箭頭。動(dòng)物依賴水和氧氣才能生存。

讀到這里,這篇“軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式分為哪些類型”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

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

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

AI