23種設計模式入門 設計模式概述及七大原則

2021-10-13 23:36:12 字數 2670 閱讀 4928

使程式擁有更好的的

**復用性(一次編譯,處處執行[手動狗頭])

可讀性(不可替代性堪憂呀)

可擴充套件性(新增功能時方便)

可靠性(新增功能後對舊功能沒有影響)

高內聚,低耦合

設計模式的原則:設計「設計模式」時,遵守的原則,這樣設計的依據

〇、設計模式核心思想

一、單一職責原則

即乙個類只負責乙個職責,如有多個職責應分為多個類

二、介面隔離原則

乙個類對另乙個類的依賴應當建立在最小介面上

如存在乙個介面inte***ce1存在4個方法a()b()c()d(),它有乙個實現類impl1實現了它的四個方法。現存在類class1需要使用介面中的b()c()方法,即class1依賴與inte***ce1,使用uml類圖表示如圖

對於實現類impl1來說,a()d()方法沒有被使用,可以無需實現,卻必須要書寫。此時出現**的冗餘。根據介面隔離原則,可以將inte***ce1介面進行拆分

此時如果有另乙個類需要使用b()c()d()三個方法時,需要將上圖中的inte***ce2再拆分一次

至此,classaimpla的依賴,classbimplb的依賴,建立在最小介面上

三、依賴倒轉原則

高層模組不應該依賴低層模組,二者都應該依賴其抽象

抽象不應該依賴細節,細節應該依賴抽象

依賴倒轉的中心思想:面向介面程式設計依賴倒轉原則的設計理念:相對於細節的多變性,抽象的東西要更為穩定。以抽象為基礎搭建的架構比以細節為基礎的架構更為穩定。

使用介面或抽象類的目的是制定好規範,將展示細節的任務交給他們的實現類去完成。

不遵守依賴倒轉原則的寫法

public

class

rawdependencereversal

}class

email

}class

person

}

此時,若person類可以接收的**不只是email,還需要新增其他**時,會比較麻煩。

遵守依賴倒轉原則進行改進:

public

class

improvedependencereversal

}inte***ce

sender

class

emails

implements

sender

}class

wechat

implements

sender

}class

persons

}

依賴倒轉的使用方式示例\

**方式1:**使用介面方式來進行依賴(呼叫方法時使用介面作為引數)。此時,依賴的是介面而不是細節類,因此符合依賴倒轉原則

inte***ce

iopenandclose

class

openandclose

implements

iopenandclose

}inte***ce

itv

**方式2:**通過構造方法來進行依賴

inte***ce

iopenandclose

inte***ce

itvclass

openandclose

implements

iopenandclose

@override

public

void

open()

}

**方式3:**通過setter方法來進行依賴

inte***ce

iopenandclose

inte***ce

itvclass

openandclose

implements

iopenandclose

@override

public

void

settv

(itv tv)

}

注意事項和細節四、黎克特制替換原則

五、開閉原則

六、迪公尺特法則

七、合成復用原則23種分為三大類

23種設計模式 概述

單例 singleton 模式 某個類只能生成乙個例項,該類提供了乙個全域性訪問點供外部獲取該例項,其拓展是有限多例模式。原型 prototype 模式 將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項。工廠方法 factory method 模式 定義乙個用於建立產品的介面,由子...

23種設計模式概述

在我們軟體開發的過程中往往會遇到需求的變更,導致我們的功能需要的改變,進而可能讓我們辛辛苦苦編寫的大量 付諸東流。那麼,該怎樣提高我們 的可擴充套件性呢。提高我們 的擴充套件性這樣在改變功能的時候就能在最小代價的情況修改我們的 設計模式,就很大程度上為我們解決了這個問題。設計模式是一套理論,由前任總...

設計模式 23種設計模式

一 軟體設計模式的概念 軟體設計模式 software design pattern 又稱設計模式,是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。它描述了在軟體設計過程中的一些不斷重 生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的 設計經驗的總結...