1. 程式人生 > >設計模式原則和分類

設計模式原則和分類

為什麼會有設計模式?

設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、程式碼設計經驗的總結。

設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向物件的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟體開發人員經過相當長的一段時間的試驗和錯誤總結出來的。

簡單總結一下就是一種更好的,更優雅的解決問題的方式。但是也有一個需要注意的地方,就是不要為了設計而設計,畢竟我們的出發點是為了解決問題而不是為了設計。

因為本人也是入行不久的小白,而設計原則這個東西也是一個雅俗共賞,千人千面的東西。部落格中寫的也是我在參考了其他人的部落格和書籍之後給出的理解,所以理解難免會有偏差,歡迎評論留言指正,一起學習討論。

設計模式的原則

1.開閉原則(Open Close Principle)

對擴充套件開放,對修改關閉。具體到實際開發就是對程式進行擴充套件的時候,不能去修改原有的程式碼,而是要在原有程式碼的基礎上進行擴充套件。這裡可以用到抽象類和介面。基於頂層方法進行不同的實現,或則在實現裡增加新的方法

2.里氏代換原則(Liskov Substiution Princicle)

里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。就是父類出現的地方把程式碼換成子類也可以正常執行不受影響。擴充套件的時候也儘量從抽象類繼承,而不要去繼承實現類。這個原則可以參考三人成虎這個典故。在擴充套件的時候儘量不要偏離這個類原有的定義。

3.單一職責原則(Single Responsibility Principle)

這個模式可以用來控制類的粒度,就是一個類不要不要做太多事情,只做一件事。這個原則是實現程式碼高內聚,低耦合的指導方針。不過具體到實際開發還是很難實現的,比如使用者註冊的功能,以前三個方法可能就搞定了,按照這個原則你可能需要把每一個步驟都拆分成獨立的方法,但是這些方法可能一個專案裡就兩三個地方用到,這種情況下是否還有單獨拆出來的必要呢?

4.依賴倒轉原則(Dependence Inversion Principle)

抽象不應該依賴於實現,細節應該依賴於實現。應用到程式碼裡就是一個介面的抽象度要足夠高,不然業務一旦擴充套件之後再去新建立的類再繼承這個類就會發現要實現的功能和基類定義的方法表達的意思差的遠了,需要重新新增加方法,而不是重寫方法。用到這裡類的地方有spring的自動注入。

5.迪米特法則(最少知道原則)(Demeter Principle)

一個實體應該儘可能少的與其他實體之間發生關係。使得系統模組相對獨立。這一點也是微服務的一個重要原則。

6.介面隔離原則(Interface Segregation Principle)

使用多個專門的介面,而不是使用一個介面來完成所有的事情。也就要高度抽象,這個和迪米特法則也是聯絡在一起的。說的再通俗一點就是做自己該做的事情。

7.合成複用原則(Composite Reuse Principle)

在一個新物件裡使用已有的物件,使之成為新物件的一部分,新物件將需要做的大功能分成各個小功能傳達到其他模組來完成,最後完成這大功能。具體到程式碼就是儘量使用組合,不要使用繼承。

設計模式分類

建立型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。

結構型模式(7種):介面卡模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。

行為型模式(11種):策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。

還有另外兩個,併發型模式和執行緒池模式。

相關推薦

設計模式原則分類

為什麼會有設計模式? 設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、程式碼設計經驗的總結。 設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向物件的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面

設計模式原則分類總結

設計模式是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。 設計模式6大原則: 單一職責原則:不要存在

PHP設計模式:類自動載入、PSR-0規範、鏈式操作、11種面向物件設計模式實現使用、OOP的基本原則自動載入配置

一、類自動載入      SPL函式 (standard php librarys)      類自動載入,儘管 __autoload() 函式也能自動載入類和介面,但更建議使用&nbs

設計模式學習之設計模式原則(一):單一職責原則里氏替換原則

學習設計模式,以《設計模式之禪》為藍本進行總結與學習,今天先記錄設計模式六大原則的兩個原則:單一職責原則(SRP)和里氏替換原則(LSP)。 單一職責原則 Single Responsibilit

JavaScript 設計模式入門框架中的實踐 http://www.codeceo.com/article/javascript-design-pattern.html

{} static log block 抽象 listener args assign ack 在編寫JS代碼的過程中,運用一定的設計模式可以讓我們的代碼更加優雅、靈活。 下面筆者就結合諸如redux的subscribe、ES6的class、vue裏面的$dispatch、

設計模式原則(3)--Dependency Inversion Principle(DIP)--依賴倒轉原則

以及 .get 依賴註入 不能 通過 而是 耦合度 面向實現 看書 1.定義:   高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。   抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對接口編程,而不是針對實現編程。 2

西遊記之設計模式原則——單一職責原則

void 可能 equals main person 方法 隱患 客戶端代碼 p s 單一職責原則 ——專心致誌只做一件事 1 package danyizhize; 2 3 class SunWuKong { 4 public void XiangM

C#模板設計模式使用學習心得

傳統 oracle 設計模式 管理系統 邏輯 導致 www. 離開 不回 模板設計模式: 模版方法模式由一個抽象類和一個(或一組)實現類通過繼承結構組成,抽象類中的方法分為三種: 抽象方法:父類中只聲明但不加以實現,而是定義好規範,然後由它的子類去實現。

設計模式原則

輸入參數 實現 而不是 -m mark pos div 方法 blog 設計模式原則 * 開發/封閉原則 * 控制反轉原則 * 接口隔離原則 * 單一職責原則 開發/封閉原則 類或對象及其方法對於擴展來說,應該是開放的,但是對於修改來說,應該是封閉的 控制反轉原則 高層次

C#設計模式原則

原則的誕生:面向物件:封裝、繼承、多型三大支柱蘊含了用抽象來封裝變化,降低耦合,實現複用的精髓; 封裝:隱藏內部的實現,保護內部資訊; 繼承:實現複用,歸納共性; 多型:改寫物件行為,實現更高級別的繼承 要實現這些目的,就必須遵守一些原則:封裝變化、對介面程式設計、少繼承多聚合 實現系統的可擴充套件、可複用、

面向物件設計模式原則

7種常用的面相物件設計原則 單一職責原則(SRP):一個類只負責一個功能領域中的相應指責,就一個類而言,應該只有一個引起它變化的原因(可以實現低耦合,換句話說就是要承擔的責任少,被複用的就頻繁) 開閉原則(OCP):軟體實體對擴充套件開放,對修改關閉。(可以在新增輔助

設計模式原則詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JAVA設計模式-工廠抽象工廠

摘抄至https://www.jianshu.com/p/3c3f6c95d7e7 本文講解GOF-23種設計模式其中的工廠方法模式和抽象工廠模式。 由於本人愛國情懷高漲,所以本文都以長安汽車作為示例,閱讀本文需要對長安汽車有一定了解。 長安悅翔V7:長安旗下一款價效比超高的緊湊型家用轎

設計模式原則:介面隔離原則

設計模式原則:介面隔離原則 介面隔離原則: 客戶端不應該依賴它不需要的介面;一個類對另一個類的依賴應該建立在最小的介面上。 (圖片來自網路) 見上圖,該把介面細分到3個介面中去,保證每個類都只實現它需要的介面。 介面隔離原則與單一職責原則有什麼區別呢? 單一職責原則,是指

設計模式實戰專案x-gen系列二

  1  詳細功能  1.1  詳細功能 配置管理模組的主要功能是: 1:獲取使用者配置的資料,配置的方式很多,要求除了框架自身提供的配置方式外,還要能支援使用者自定義的配置方式。比如:框架本身提供預設的配置方式為xml配置,如果使用者想使用資料庫來配置,那麼框

設計模式原則——開放封閉原則

設計模式一共有六大原則: 單一原則、開放封閉原則、介面分離原則、里氏替換原則、最少知識原則、依賴倒置原則。 這篇部落格是自己對開放封閉設計原則的一些拙見,有何不對歡迎大家指出。 開放封閉原則: 軟體實體(類,模組,函式等)應該可以擴充套件,但是不可修改。 (解釋:其原則就是,設計一個類的時候時刻考慮

設計模式】Iterator迭代器設計模式(容器容器的遍歷)

在遍歷容器元素的時候,有很多初學者在疑惑,為什麼返回一個iterator我就能夠去遍歷這個容器了呢? 今天我們就來深入剖析一下迭代器iterator的設計模式(循序漸進的剖析,一定要耐心看完) iterator是"四人幫"所定義的23種設計模式之一(不太難,也不是非常重要,

讀《大話設計模式《head first 設計模式》心得

1.面向物件的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。 2.如果你能夠想到多於一個的動機去改變一個類,那麼這個類就具有多於一個的職責。就一個類而言,應該僅有一個引起它變化的原因。 3.開放-封閉原則是面向

C#軟體設計——小話設計模式原則之:開閉原則OCP

前言:這篇繼續來看看開閉原則。廢話少說,直接入正題。 軟體設計原則系列文章索引 一、原理介紹 1、官方定義 開閉原則,英文縮寫OCP,全稱Open Closed Principle。 原始定義:Software entities (classes, modules, functions) sho

C#軟體設計——小話設計模式原則之:單一職責原則SRP

前言:上篇C#軟體設計——小話設計模式原則之:依賴倒置原則DIP簡單介紹了下依賴倒置的由來以及使用,中間插了兩篇WebApi的文章,這篇還是迴歸正題,繼續來寫寫設計模式另一個重要的原則:單一職責原則。 軟體設計原則系列文章索引 一、原理介紹 1、官方定義 單一職責原則,英文縮寫SRP,全稱Sing