設計模式那些事

来源:https://www.cnblogs.com/Amedeo/archive/2018/01/22/8323881.html
-Advertisement-
Play Games

什麼是設計模式?我們為什麼要學習和使用設計模式?設計模式又有哪些?這裡博主根據自己所瞭解的內容做一簡單介紹。 1、什麼是設計模式? 設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的代碼設計經驗的總結。 2、我們為什麼要學習和使用設計模式? 設計模式(Design p ...


什麼是設計模式?我們為什麼要學習和使用設計模式?設計模式又有哪些?這裡博主根據自己所瞭解的內容做一簡單介紹。

1、什麼是設計模式?

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

2、我們為什麼要學習和使用設計模式?

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

3、設計模式又有哪些?

我們現在所說的設計模式大多數都指的是GOF設計模式,主要分為創建型、結構型、行為型3類,共有12種模式。

ps:《Design Patterns: Elements of Reusable Object-Oriented Software》(即《設計模式:可復用面向對象軟體的基礎》),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。這幾位作者常被稱為"四人組(Gang of Four)",也就是所謂的GOF。

 

一、創建模式

1.1 設計模式之 Singleton(單態/單件/單例)

保證一個類只有一個實例,並提供一個訪問它的全局訪問點。

1.2 設計模式之 Factory(工廠)

使用工廠模式就象使用 new 一樣頻繁。

ps:工廠模式有簡單工廠模式和抽象工廠模式兩種。

1.3 設計模式之 Builder(建造者)

汽車由車輪 方向盤 發動機很多部件組成,同時,將這些部件組裝成汽車也是一件複雜的工作,Builder 模式就是將這兩種情況分開進行。

1.4 設計模式之 Prototype(原型)

用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。

二、結構模式

2.1 設計模式之 Adapter(適配器)

使用類再生的兩個方式:組合(new)和繼承(extends),這個已經在 thinking in java 中提到過。

2.2 設計模式之 Proxy(代理)

以 Jive 為例,剖析代理模式在用戶級別授權機制上的應用。

2.3 設計模式之 Facade(外觀)

可擴展的使用 JDBC 針對不同的資料庫編程,Facade 提供了一種靈活的實現。

2.4 設計模式之 Composite(組合)

就是將類用樹形結構組合成一個單位。你向別人介紹你是某單位,你是單位中的一個元素,別人和你做買賣,相當於和單位做買賣。文章中還對 Jive 再進行了剖析。 

2.5 設計模式之 Decorator(裝飾器)

Decorator 是個油漆工,給你的東東的外表刷上美麗的顏色。

2.6 設計模式之 Bridge(橋連)

將牛郎織女分開(本應在一起,分開他們,形成兩個介面),在他們之間搭建一個橋(動態的結合)。 

2.7 設計模式之 Flyweight(共用元)

提供 Java 運行性能,降低小而大量重覆的類的開銷。

三、行為模式

3.1 設計模式之 Command(命令)

什麼是將行為封裝,Command 是最好的說明。

3.2 設計模式之 Observer(觀察者)

介紹如何使用 Java API 提供的現成 Observer 。

3.3 設計模式之 Iterator(迭代器)

這個模式已經被整合入Java的 Collection。在大多數場合下無需自己製造一個Iterator,只要將對象裝入 Collection 中,直接使用 Iterator 進行對象遍歷。 

3.4 設計模式之 Template(模板方法)

實際上向你介紹了為什麼要使用 Java 抽象類,該模式原理簡單,使用很普遍。

3.5 設計模式之 Strategy(策略)

不同演算法各自封裝,用戶端可隨意挑選需要的演算法。

3.6 設計模式之 Chain of Responsibility(責任鏈)

各司其職的類串成一串,好象擊鼓傳花,當然如果自己能完成,就不要推委給下一個。

3.7 設計模式之 Mediator(中介)

Mediator 很象十字路口的紅綠燈,每個車輛只需和紅綠燈交互就可以。

3.8 設計模式之 State(狀態)

狀態是編程中經常碰到的實例,將狀態對象化,設立狀態變換器,便可在狀態中輕鬆切換。

3.9 設計模式之 Memento(備忘錄)

很簡單一個模式,就是在記憶體中保留原來數據的拷貝。

3.10 設計模式之 Interpreter(解釋器)

主要用來對語言的分析,應用機會不多。

3.11 設計模式之 Visitor(訪問者)

訪問者在進行訪問時,完成一系列實質性操作,而且還可以擴展。

 

 

作者:耑新新,發佈於  博客園

轉載請註明出處,歡迎郵件交流:[email protected]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天瀏覽一些技術網站,看到這個題目。雖然覺著代碼這麼寫的可能性低之又低,但是卻也考驗對js瞭解的程度。 在 JavaScript 中 (a ==1 && a== 2 && a==3) 可能為 true 嗎?解釋說nothing is impossible! 這裡是兩個可能的答案: 運行代碼 運行代碼 ...
  • Vue.js 允許你自定義過濾器,可被用於一些常見的文本格式化。過濾器可以用在兩個地方:雙花括弧插值和 v-bind 表達式 (後者從 2.1.0+ 開始支持)。過濾器應該被添加在 JavaScript 表達式的尾部,由“管道”符號指示: 組件中定義過濾器 你可以在一個組件的選項中定義本地的過濾器: ...
  • 二叉樹是一種很重要的數據結構,對於二叉樹的遍歷,有深度優先遍歷和廣度優先遍歷,深度優先遍歷又有先序、中序、後續遍歷,廣度優先遍歷就是按層遍歷。 1. 深度優先遍歷 ___ 深度優先遍歷,也就是先序、中序、後續遍歷,我之前有一篇隨筆已經說的很清楚了,在這裡我只貼下代碼就好了。 傳送門: "詳細教你實現 ...
  • 註意引本地的jquery~ <!DOCTYPE HTML><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><t ...
  • 綁定 HTML Class 對象語法 ①.添加單個class: 上面的語法表示 active 這個 class 存在與否將取決於數據屬性 isActive為真還是假。 ②.添加多個class: 和如下 data: 結果渲染為: ③.綁定的數據對象不必內聯定義在模板里: ④.綁定一個返回對象的計算屬性 ...
  • 用 let: 代替var 特點: 1. 防止聲明提前 2. 不允許重覆聲明同名變數 3. 添加塊級作用域: 什麼是塊級作用域: 一個{}程式結構內,也是一個作用域。 比如: for while do...while if...else if...else 只要用let聲明的變數,僅在當前塊內有效 4 ...
  • <!doctype html><html><head><meta charset="utf-8"><title>無標題文檔</title></head><style>#div1{position:relative;}#div1 div{width:50px;height:50px;backgroun ...
  • 首先,放上項目github地址: https://github.com/codethereforam/java design patterns, 我是用java實現的 一、前言 題目中的這三個設計模式屬於 ,作用是為了 抽象實例化過程 。 我之前學過這三個設計模式,但最近發現又無法釐清這三個的區別了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...