大話設計模式之愛你一萬年:第一章 設計模式基本概念:2.GoF的23種設計模式的分類和功能

2021-02-15 SpringBoot

學習說明:本篇的知識,只需要有一個大概的了解即可,在後面的章節中每個設計模式都會有詳細的介紹。


相關歷史文章(閱讀本文前,您可能需要先看下之前的系列👇

國內最全的Spring Boot系列之三

2020上半年發文匯總「值得收藏」

SpringBoot框架開發的優秀的項目「值得收藏學習」 - 第335

1天學會別人1個月學會的設計模式

大話設計模式之愛你一萬年:第一章 設計模式基本概念:

一、設計模式的分類

設計模式有兩種分類方法,根據模式的[目的]和模式的[作用範圍]來分。

1.1 根據目的來分

根據模式是用來完成什麼工作來劃分,這種方式可分為創建型模式、結構型模式和行為型模式3 種。

(1)創建型模式(5種):用於描述「怎樣創建對象」,它的主要特點是「將對象的創建與使用分離」。GoF 中提供了單例模式、工廠方法模式、抽象工廠模式、原型模式、建造者模式 5 種創建型模式。

(2)結構型模式(7種):用於描述如何將類或對象按某種布局組成更大的結構,GoF 中提供了代理模式、適配器模式、橋接模式、裝飾模式、外觀模式、享元模式、組合模式 7 種結構型模式。

(3)行為型模式(11種):用於描述類或對象之間怎樣相互協作共同完成單個對象都無法單獨完成的任務,以及怎樣分配職責。GoF 中提供了模板模式、策略模式、命令模式、責任鏈模式、狀態模式、觀察者模式、中介者模式、迭代器模式、訪問者模式、備忘錄模式、解釋器模式 11 種行為型模式。

1.2 根據作用範圍來分

       根據模式是主要用於類上還是主要用於對象上來分,這種方式可分為類模式和對象模式兩種。

(1)類模式:用於處理類與子類之間的關係,這些關係通過繼承來建立,是靜態的,在編譯時刻便確定下來了。GoF中的工廠方法、(類)適配器、模板方法、解釋器屬於該模式。

(2)對象模式:用於處理對象之間的關係,這些關係可以通過組合或聚合來實現,在運行時刻是可以變化的,更具動態性。GoF 中除了以上 4 種,其他的都是對象模式。

說明:

 

組合(部分與整體的關係):部分與整體是與生俱來的,部分的存在依賴於整體。比如人與人的某個器官,人一出生,器官就在,人死亡,器官也就沒了意義。

聚合(強的關聯關係):你與你的電腦(或者其它物品),電腦是屬於你的吧,但是你是一出生就擁有了電腦嗎,電腦是某個廠商生產出來的,然後你買過來才成為了你的一部分。你死了以後,電腦也可以送給別人繼續用啊!這就不叫做其存亡了,所以這是聚合。

 

 

二、設計模式的功能

       學習說明:簡單過一下就可以了,後面章節會詳細介紹。

前面說明了 GoF 的 23 種設計模式的分類,現在對各個模式的功能進行介紹。

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

(2)原型(Prototype)模式:將一個對象作為原型,通過對其進行複製而克隆出多個和原型類似的新實例。

(3)工廠方法(Factory Method)模式:定義一個用於創建產品的接口,由子類決定生產什麼產品。

(4)抽象工廠(AbstractFactory)模式:提供一個創建產品族的接口,其每個子類可以生產一系列相關的產品。

(5)建造者(Builder)模式:將一個複雜對象分解成多個相對簡單的部分,然後根據不同需要分別創建它們,最後構建成該複雜對象。

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

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

(8)橋接(Bridge)模式:將抽象與實現分離,使它們可以獨立變化。它是用組合關係代替繼承關係來實現,從而降低了抽象和實現這兩個可變維度的耦合度。

(9)裝飾(Decorator)模式:動態的給對象增加一些職責,即增加其額外的功能。

(10)外觀(Facade)模式:為多個複雜的子系統提供一個一致的接口,使這些子系統更加容易被訪問。

(11)享元(Flyweight)模式:運用共享技術來有效地支持大量細粒度對象的復用。

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

(13)模板方法(TemplateMethod)模式:定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結構的情況下重定義該算法的某些特定步驟。

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

(15)命令(Command)模式:將一個請求封裝為一個對象,使發出請求的責任和執行請求的責任分割開。

(16)責任鏈(Chain of Responsibility)模式:把請求從鏈中的一個對象傳到下一個對象,直到請求被響應為止。通過這種方式去除對象之間的耦合。

(17)狀態(State)模式:允許一個對象在其內部狀態發生改變時改變其行為能力。

(18)觀察者(Observer)模式:多個對象間存在一對多關係,當一個對象發生改變時,把這種改變通知給其他多個對象,從而影響其他對象的行為。

(19)中介者(Mediator)模式:定義一個中介對象來簡化原有對象之間的交互關係,降低系統中對象間的耦合度,使原有對象之間不必相互了解。

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

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

(22)備忘錄(Memento)模式:在不破壞封裝性的前提下,獲取並保存一個對象的內部狀態,以便以後恢復它。

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

       這 23 種設計模式不是孤立存在的,很多模式之間存在一定的關聯關係,在大的系統開發中常常同時使用多種設計模式。

à悟空學院:https://t.cn/Rg3fKJD

大話設計模式之愛你:https://dwz.cn/wqO0MAy7

相關焦點

  • 大話設計模式之愛你一萬年:第二章 創建型模式:單例模式::我的女朋友只有你一個:3.4.5.單例模式的實現-餓漢/靜態/枚舉
    2020上半年發文匯總「值得收藏」SpringBoot框架開發的優秀的項目「值得收藏學習」 - 第3351天學會別人1個月學會的設計模式大話設計模式之愛你一萬年:第一章 設計模式基本概念:大話設計模式之愛你一萬年:第一章 設計模式基本概念:2.GoF的23種設計模式的分類和功能大話設計模式之愛你一萬年
  • GoF 的 23 種設計模式的分類和功能
    GoF 中提供了模板方法、策略、命令、職責鏈、狀態、觀察者、中介者、迭代器、訪問者、備忘錄、解釋器等 11 種行為型模式。2. 根據作用範圍來分根據模式是主要用於類上還是主要用於對象上來分,這種方式可分為類模式和對象模式兩種。類模式:用於處理類與子類之間的關係,這些關係通過繼承來建立,是靜態的,在編譯時刻便確定下來了。
  • 速記GoF的23種設計模式
    一、前篇回顧經過一系列堅固的(SOLID)理念洗禮,遵循著堅固的(SOLID)的理念去構建軟體架構,卻總感覺缺少些什麼東西?就好像你明明知道要做些什麼東西或者事情,卻發現有很多問題 -- 從哪裡下手?有沒有下手的工具?在堅固的軟體構建過程實踐中,GoF(Gang of Four) - 簡稱四人組,匯總了面向對象的23種設計模式。
  • 從零開始學設計模式(一)——設計模式介紹及工廠模式
    一直以來軟體都是為了用來解決現實生活中遇到的複雜問題而存在,設計模式(Design pattern)就像一套基礎武功心法,每一式都代表了一類問題的最佳實踐,且可根據實際情況組合使用。本系列文章筆者將帶大家一起從零開始學習設計模式,後面會逐個剖析23種設計模式在Java中的具體實現,讀者需具備基本的Java編程概念。
  • - 讀《大話設計模式》筆記
    - 讀《大話設計模式》筆記讀《大話設計模式》前言和第一章,閱讀筆記和感悟,建議購買原書閱讀,文中作者即原書《大話設計模式》一書作者。1 前言書中章節閱讀之前,作者提出的兩個觀點,大家可以領會一下:1.1 設計模式是否有必要全部學一遍?
  • 設計模式已死?
    這邊談的就是四人輩(Gang of four, Gof)出版的《Design Patterns: Elements of Reusable Object-Oriented Software 》中提及之23個設計模式,而不是泛指某些事物反覆出現而形成的模式或各式衍生物。設計模式從1994出版至今近20個年頭,對該書內容支持者與反對者間的爭論交錯不休。
  • 【教】教學設計的模式和教學策略的分類
    教學設計過程的模式則是在教學設計的實踐當中逐漸形成的,運用系統方法進行教學開發、設計的理論的簡化形式。教學設計的一般模式教學設計的一般模式是適合於多種設計類型的教學模式,需要找到教學設計的基本組成部分。教學設計者在教學設計實踐的基礎上總結出教學設計過程的基本要素,如圖1-1所示。
  • 一文帶你理解常用的23種設計模式
    一、概念軟體工程中,設計模式是指軟體設計問題的推薦方案。設計模式一般是描述如何組織代碼和使用最佳實踐來解決常見的設計問題。設計模式是高層次的方案,與具體實現細節無關(如算法,數據結構,網頁等)。設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。
  • Java設計模式之適配器模式和橋接模式詳細解析
    適配器模式主要有兩種類型,一種是類適配器模式,主要通過繼承來實現適配器功能;一種是對象適配器模式,通過組合來實現適配器功能。 這兩種適配器模式中,都實現了該功能,不過在這裡推薦使用對象適配器模式,相比類適配器模式,它更加靈活,也符合設計原則中的合成復用原則: 儘量使用合成/聚合的方式,而不是使用繼承。適配器模式的優點: 提升了類的復用和靈活度。
  • 設計模式之策略模式
    行為型設計模式策略模式一簡介當一個對象有多種行為要執行時,我們可以使用策略模式,讓對象自由選擇執行的行為種類,避免使用if…else if….else if…這種嵌套代碼圖22、定義cpu類在實際開發中,我們的代碼都是在系統裡,springboot系統自帶spring初始化功能,故在實際代碼裡是不能用new方式創建spring上下文,否則系統初始化創建一次,個人又創建一次,將導致我們的代碼都執行2次。系統的初始化上下文代碼大致圖圖7所示。
  • 設計模式之觀察者模式(一)
    前面兩篇已經帶大家走進了設計模式的世界,了解了策略模式,還有基本的OO基礎和OO原則,不知道你是否能讀懂以及了解呢。接下來,我們就要進入第二個模式的學習了,觀察者模式,讓我們來一窺究竟吧。觀察者模式是JDK中使用最多的模式之一,可以幫你的對象知悉情況,不會錯過該對象感興趣的事。對象甚至在運行時可決定是否要繼續被通知。並且後續還會一併介紹一對多關係,以及鬆耦合。
  • 教學設計的模式和教學策略的分類
    教學設計過程的模式則是在教學設計的實踐當中逐漸形成的,運用系統方法進行教學開發、設計的理論的簡化形式。教學設計的一般模式是適合於多種設計類型的教學模式,需要找到教學設計的基本組成部分。教學設計者在教學設計實踐的基礎上總結出教學設計過程的基本要素,如圖1-1所示。通過對教學設計模式的基本構成要素的分析,以及教學設計的實踐,我們得出教學設計的一般模式,如圖1-2所示。
  • 觀察者模式--設計模式(一)
    (發布訂閱)模式,因此在弄清開始SpringBoot的事件監聽機制的源碼分析前,先來學習下觀察者模式,嘿嘿。此時可以利用觀察者模式來實現這個功能,這些優質用戶可以訂閱自己感興趣的體育賽事,當現場直播有比分更新或解說員的評論更新時,此時可以通過簡訊發給訂閱這個賽事的優質用戶。同時優質用戶也可以取消訂閱,此時不會收到任何信息。
  • java 23種設計模式及其在spring,tomcat,jdk中的應用
    設計模式是前人(一般都是大師)對程序設計經驗的總結,學習並應用設計模式可以使我們開發的項目更加規範、便於擴展和維護,這大概是為什麼設計模式基本是面試必問的原因吧!本文主要內容有四部分:設計原則、設計模式分類、23種設計模式、設計模式應用。設計模式雖多,但重要的、主流開源框架應用較多的往往就那幾個。
  • 23個經典JDK設計模式
    酷殼版主陳皓近日發表博文《JDK裡的設計模式》,文中他列出了JDK中有關23個經典設計模式的示例。現把全文轉載於此,全文如下:下面是JDK中有關23個經典設計模式的示例:Structural(結構模式)Adapter:把一個接口或是類變成另外一種。
  • 教學設計的模式
    教學設計的模式在教師招聘考試中也是比較重要的一個重點內容,在考試中主要是以單選、多選的形式出題,所以考生在把握的過程中要重點掌握教學設計的模式分類,能夠區分出這三種模式。1.系統分析模式系統分析模式是在借鑑工程管理科學的某些原理基礎上形成的。這種模式將教學過程看做一個輸入 產出的系統過程「,輸入」是學生「,產出」是受過教育的人。
  • 設計模式 | Iterator設計模式
    1.0 前言 此文是日本作者結城浩著作的《圖解設計模式》的譯作,原文用java程序編寫,對熟練掌握C++、對java不熟悉的讀者來說,程序讀起來相當費勁。因此本文作者將書中的23個設計模式的程序全部用visual C++6.0和STL庫進行了重新編寫和編譯。
  • Java設計模式之策略模式詳解
    前言在軟體領域中,設計模式作為一種經典的開發實踐常常需要我們去深入的理解,而策略模式作為設計模式的一種,使用頻率也是相對來說比較高的,在Java中,當我們學習TreeSet集合的時候,就採用了經典的策略模式的思想,本文主要講解策略模式。
  • 如何應用GOF設計模式中的構建者模式創建複合對象實例
    軟體項目實訓及課程設計指導——如何應用GOF設計模式中的構建者模式創建複合對象實例1、GOF設計模式中的構建者模式構建者設計模式能夠將一個複雜對象(它一般為組合類)的構建過程與它的表示部件相互分離,使得同樣的構建過程可以創建出不同的表示部件——也就是希望所獲得的目標組合對象
  • 如何設計商業模式?——《商業模式新生代》讀書筆記之七
    為了確保大家有耐心讀完所有的內容,對於這幾種商業模式設計的方法我也將分為幾期來為大家進行詳細解讀。商業模式設計方法的使用2.1 客戶洞察什麼是客戶洞察呢?我們商業模式畫布的第一部分就是客戶細分,我們經商一定要注意,要盯住給你飯的人(客戶),而不是盯著和你一樣拿著碗的人(競爭對手)。了解客戶在看什麼,聽到什麼,擔心什麼,渴望什麼,這才是經商的頭等大事。大多數商家第一步就走錯了。有共鳴的朋友點個讚,Q個1。只有確認好了我們的客戶後,我們的價值主張、渠道、客戶關係、收益來源等等模塊自然也就相應的可以確認了。