初識設計模式0:LOL in Java

来源:http://www.cnblogs.com/hooray2010/archive/2017/07/02/7106538.html
-Advertisement-
Play Games

有一定編碼經驗的人,不知不覺就能掌握一些常用的設計模式。 設計模式於我的感悟就是,編碼的套路,解決特定問題的最佳實踐。正如打LOL一樣,遇到不同的戰局,採取不能的策略。 新手剛瞭解設計模式中抽象的概念時容易一臉茫然(沒有遇到具體的應用場景確實也難以掌握),而老手往往駕輕就熟。 其實各行各業很多方面的 ...


有一定編碼經驗的人,不知不覺就能掌握一些常用的設計模式。

設計模式於我的感悟就是,編碼的套路,解決特定問題的最佳實踐。正如打LOL一樣,遇到不同的戰局,採取不能的策略。

新手剛瞭解設計模式中抽象的概念時容易一臉茫然(沒有遇到具體的應用場景確實也難以掌握),而老手往往駕輕就熟。

其實各行各業很多方面的思想是想通的,設計模式的思路不僅限於編程!我們不僅可以 Thinking in Java,也可以 LOL in Java !

【初識設計模式】模塊,將對一些常用的設計模式進行粗淺的記錄。舉例也採用LOL的思路,更容易接受這些抽象的概念。

用LOL的思路學習設計模式,so easy!

 

下邊是粘貼的設計模式的一些概念:

 

設計模式是什麼

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

使用設計模式是為了可重用代碼、讓代碼更容易地被他人理解、保證代碼可靠性。

毫無疑問,設計模式於己於人於系統都是多贏的,設計模式使代碼編製真正工程化,設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。

 

總體來說,設計模式分為3大類總共23種:

1、創建型模式,共5種

工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式

2、結構型模式,共7種

適配器模式、裝飾器模式、外觀模式、橋接模式、組合模式、享元模式

3、行為型模式,共11種

策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式

 

設計模式六大原則

1、開閉原則OCP

開閉原則說的是,對擴展開放、對修改關閉。在程式需要進行擴展的時候,不能去修改原有的代碼,這也是為了使程式的擴展性更好、易於升級和維護。

2、里氏代換原則LSP

在軟體中將一個基類對象替換成它的子類對象,程式將不會產生任何錯誤和異常,反過來則不成立。如果一個軟體實體使用的是一個子類對象的話,那麼它一定不能夠使用基類對象。里氏代換原則的程式表現就是:在程式中儘量使用基類類型來對對象進行定義,而在運行時再確定其子類類型,用子類對象來替換父類。

3、控制反轉原則IOC

針對介面編程,依賴於抽象而不依賴於具體

4、介面隔離原則ISP

使用多個隔離的介面,比使用單個介面要好

5、迪米特法則DP

一個實體應當儘量少地與其他實體間發生相互作用,使得系統功能模塊相對獨立

6、合成復用原則

儘量使用組合/聚合的方式,而不是使用繼承

 

設計中的三個關鍵字

1、抽象化

在眾多事物中提取出共同的、本質性的特征,捨棄非本質的特征,就是抽象化。抽象化的過程也是一個剪裁的過程,在抽象時,同於不同,取決於從什麼角度上來抽象。抽象的角度取決於分析問題的目的。

2、實現化

抽象類給出的具體實現,就是實現化。

一個類的實例就是這個類的實例化,一個具體子類是它的抽象超類的實例化。

3、解耦

這就比較重要了,平時我們老說好的代碼應該是"高內聚、低耦合",那麼什麼是耦合呢?

所謂耦合,就是兩個實體的行為的某種強關聯。而將它們之間的強關聯去掉,就是解耦。解耦是指將抽象化和實現化之間的耦合解開,或者說是將它們之間的強關聯改換成弱關聯。

所謂強關聯,指的是在編譯時期已經確定的,無法在運行時期動態改變的關聯;所謂弱關聯,就是可以動態地確定並且在運行時期動態改變的關聯。從這個定義看,繼承關係是強關聯,聚合關係是弱關聯。


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

-Advertisement-
Play Games
更多相關文章
  • 題目描述 香穗子在田野上調蘑菇!她跳啊跳,發現自己很無聊,於是她想了一個有趣的事情,每個格子最多只能經過1次,且每個格子都有其價值 跳的規則是這樣的,香穗子可以向上下左右四個方向跳到相鄰的格子,並且她只能往價值更高(這裡是嚴格的大於)的格子跳. 香穗子可以從任意的格子出發,在任意的格子結束, 那麼她 ...
  • 題目描述 和所有人一樣,奶牛喜歡變化。它們正在設想新造型的牧場。奶牛建築師Hei想建造圍有漂亮白色柵欄的三角形牧場。她擁有N(3≤N≤40)塊木板,每塊的長度Li(1≤Li≤40)都是整數,她想用所有的木板圍成一個三角形使得牧場面積最大。 請幫助Hei小姐構造這樣的牧場,並計算出這個最大牧場的面積。 ...
  • Netty 線程模型 Netty的線程模型主要是基於React,因為考慮到應用場景的不同所以演化出多種版本。 單線程模式 即接收服務請求以及執行IO操作都由一個線程來完成,由於採用的是IO多路復用這類無阻塞IO操作,所以在請求量不大的情況下單線程模式也是可以解決一部分場景問題的。 單接收多工作線程模 ...
  • 一、前言 今天在Ubuntu安裝了lnmp環境,運行項目的時候出現了,引入500的錯誤 二、查看錯誤 再項目文件入口添加,代碼顯示錯誤內容,查看到一下錯誤 三、分析錯誤內容 查看問題描述以及資料,發現是php open_basedir 配置的問題,php不能引入其授權目錄上級及其以上的文件,預設配置 ...
  • 上傳頭像,自己感覺了好久,就是上傳文件唄其實,存在一個路徑,資料庫存儲這個路徑,然後展示給前端,啥都不說,看怎麼實現的。 資料庫設置如下 form 表單設計: 後端實現代碼 存儲路徑是 接下來是前端的展示 這裡說明下,這裡的後端實現上傳的頭像的代碼 在Windows上回報錯,說文件不存在,我試著去修 ...
  • 簡單工廠模式 簡單工廠模式是類的創建模式,又叫做靜態工廠方法模式。簡單工廠模式由一個工廠對象決定生產出哪一種產品類的實例。 為什麼要使用簡單工廠模式 原因很簡單:解耦。 LOL場景分析: LOL中目前有100多個英雄,各個人物的技能全都不同,具體英雄的代碼實現必定不同; 但是每個英雄的技能都是Q、W ...
  • 上面這段代碼是書上關於Nio具體工作過程的代碼示例。其工作過程可以具體闡述如下: 其中有兩個關鍵的類:Channel和Selector,它們是NIO中的核心概念。其中Channel可類比為交通工具,而且是具體的交通工具,例如:汽車,自行車。而Selector則可以類比為車輛調度系統,負責車輛運行狀況 ...
  • image.png 配置python 2.7 bs4 requests 安裝 用pip進行安裝 sudo pip install bs4 sudo pip install requests 簡要說明一下bs4的使用因為是爬取網頁 所以就介紹find 跟find_all find跟find_all的不 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...