設計模式與面向對象

来源:https://www.cnblogs.com/pycrab/archive/2018/04/22/8905880.html
-Advertisement-
Play Games

面向對象基礎 1. 抽象 2. 封裝 3. 繼承 4. 多態 5. 組合 良好的OO設計 1. 可復用 2. 可擴充 3. 可維護 4. 設計模式 ...


面向對象基礎設計原則

  1. 抽象
  2. 封裝
  3. 繼承
  4. 多態
  5. 組合

典型的設計原則

  1. Liskov替換原則(LSP)
    • 即子類型必須能夠替換他們的基類型,或者說子類型不能添加任何基類型沒有的附加約束。
    • 針對介面編程思想:實現繼承破壞了基類的實現,介面繼承並不定義對象之間的內部關係,耦合度更低,擴展性更好
  2. 開放-封閉原則(OCP)
    • 即對修改封閉,對擴展開放
    • 基本思想就是封裝變化的行為作為抽象類或介面
    • 策略模式和模板方法模式提供了實現
  3. 單一職責原則(SRP)
    • 即一個類應當只有一個職責
    • 建立高內聚的類,分離出不相關的功能
  4. 介面隔離原則(ISP)
    • 即介面的單一職責性
    • 定製服務,為不同的角色提供不同的介面,防止介面污染
  5. 依賴倒置原則(DIP)
    • 即高層模塊不應依賴於低層模塊,兩者都應該依賴於抽象
    • 面向介面編程,讓高層與低層都依賴介面(抽象)
    • 其他表述
      • 好萊塢原則:呆著別動,到時我會找你
      • 控制反轉(IoC)或依賴註入
    • 比如利用抽象工廠模式解除兩個類之間的依賴關係;利用Spring框架通過XML配置文件建立介面和具體類之間的關係

良好的OO設計

  1. 可復用
  2. 可擴充
  3. 可維護
  4. 23種GoF設計模式

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

-Advertisement-
Play Games
更多相關文章
  • 正則的一些基礎知識 創建正則 通過構造函數 const pattern = new RegExp(pattern,modifiers) pattern: 匹配的字元串形式,可以有變數 modifiers: 匹配的模式,g(全局),i(忽略大小寫),u(多行) 字面量的形式: const patter ...
  • 最近在學習react,然後遇到react中css該怎麼寫這個問題,上知乎上看了好多大牛都說styled-components好用是大勢所趨。 但我自己用了感覺體驗卻很差,我在這裡說說我為啥覺得styled-components不好用。 1.既然用了styled-components,那除了引用全局的 ...
  • HTML內容元素中圖片元素 使用img元素:src屬性:圖片路徑。 alt屬性:圖片無法顯示的時候使用替代文本,title屬性:滑鼠懸停時顯示文本內容。 在同一張圖片上點擊不同的位置鏈接到不同的頁面上 使用map,和area元素(map是area的父元素) 加上id或者name是為瞭解決相容性。 s ...
  • 路由的作用是分隔應用為不同的區塊,每個區塊基於匹配當前URL的規則。 路由可以分為服務端與客戶端兩種,服務端以Express.js為例: 服務端接收請求並路由至一個控制器(controller),控制器執行指定的操作(action)。 客戶端的路由在概念上與服務端相似,其好處是不需要每次URL地址變 ...
  • 效果圖展示: 具體實現代碼如下: (1)html部分 (2)main.css文件代碼 註意:具體圖片可以自行改動 (3)game.js文件代碼 1 /* 全局變數 */ 2 3 var WIDTH = 24; 4 var HEIGHT = 24; 5 var len ;//蛇的長度 6 var sp ...
  • 設計模式這個東西理論上多,說的人多,能理解的人少,願意看的人少,因此我這個瀏覽量上不去很正常。不過我希望幫助到真正想看的人。剛和以前同事通了電話,程式員同事之間如果想成為朋友,必須一起拼搏,等若幹年後,大家回憶起來那段經歷,自然友誼常在!今天去見了同事給我介紹的女朋友,小孩無娘,說起來話長,一句話, ...
  • 本文介紹一個筆者在實際工作中的實施的基於ActiveMQ的一個高穩定,可擴展的非同步消息系統。 ActiveMQ是一個成熟的基於Java語言的開源消息系統,在實際應用中被大量使用。ActiveMQ在系統穩定性,系統的容錯和擴展等方面都有很多成熟的方案,也有很多開源的管理工具,是部署非同步消息系統的一個很 ...
  • 所謂適配器模式,其實很簡單,就是將一個類的介面轉換成客戶端所期待的另一個介面,使得原本不相容的兩個類可以一起工作。 假設我們有一個Type-c介面,但是要使用的介面確實usb的介面,這時候要怎麼辦呢?解決方法就是用一個適配器將Type-c類轉換成usb類,這樣我們就能使用這個Type-c介面了。 實 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...