原學之設計模式- 設計模式來源

引言

各位旅行者們你們好,我是小森,首先我為啥是程序員。學了技術快六年了,但一直都是斷斷續續,本身自己的條件,從2021年11月份開始下載原神,總而言之不了解一些抽卡機制導致退了并且刪除了具體賬號打算重新了解,從原神4.0開始了解抽卡機制后,徹底迷上了 ‘巴巴托斯‘’’白絲舔舔舔(個人癖好)。話說回來這個誒嘿讓人感覺不靠譜,哈哈哈 當然劇情方面來看塑造出該溜子是對他對自由之神而言無人稱霸,解放蒙德這塊地方才是最穩的 然后化身為吟游詩人 溫迪。
回到故事文章本身 米哈游這家公司技術實力還是不錯的,至少在u3d 引擎 魔改方面,佩服

話說回來設計模式起源 :是隨著面向對象語言開始流行 大家發現這個有搞頭所以三位大佬站出來一套通用的設計思想誕生,‘

’設計模式“
是由Gof三位大佬提出基于面向對象核心(封裝繼承多態)擴展 對現實生活運用到面向對象程序設計里

什么是類和對象
類:可以是被自定義 人類屬于古猿類 所謂的物語類,人以群分 人類有很多特點(在這里穿插一個情緒化內容,人有選擇,你居然選擇了原神沒必要可生氣,玩個游戲還宣泄,搞不懂這是在干什么,難道你不就是因為生活沒有希望想玩玩游戲順便社交? 若是這樣建議不玩,搞得好像游戲公司都得是仇人一樣這種人盡量遠離 并且, 還有一些玩出攻略得值得珍惜 視頻平臺該怎么說呢他也是服務業,一些人就發動亂象搞信息繭房 ,然后平臺還扶持 不作死平臺,點名某二次元一哥平臺 流量才是你的財報? 發個牢騷而已不必要代入若你在意 你也跟動不動就動手,該鋤大地的玩家就去鋤大地 ,前提是你的尊重難道選擇,劇情我看來 比某些神人電視劇好看多了 ,你要是不同意就不要往下看若你還往下看,就拉黑你 ,當然我會做成視頻 )
好了繼續 人類有很多特點(不要具體想象成把自己想象成人造人啊) ,人造物 甚至龍工智能…
當然機器人從機械臂開始發展不到十幾年精準的工業化生產,當然機械臂取代人類了嗎很明顯不能運輸還得靠人 以及制造業

對象是面向對象編程(Object-Oriented Programming, OOP)中的一個核心概念,指的是類的實例化產物。在編程中,對象將數據(屬性)和行為(方法)封裝為一個整體,具有以下特點:

  1. 屬性(Properties):對象包含的數據特征

    • 例如:一個"汽車"對象可能具有品牌、顏色、最高時速等屬性
    • 屬性可以是基本數據類型(整數、字符串等)或其他對象
  2. 方法(Methods):對象能執行的操作

    • 例如:"汽車"對象可能有啟動、加速、剎車等方法
    • 方法定義了對象的行為和功能
  3. 封裝性(Encapsulation):

    • 對象對外隱藏內部實現細節
    • 通過定義公共接口(public interface)來與外界交互
    • 例如:用戶只需知道如何調用"啟動"方法,無需了解引擎如何工作
  4. 實際應用場景:

    • 在電商系統中:"訂單"對象包含訂單號、商品列表、總價等屬性,以及計算總價、生成發票等方法
    • 在游戲開發中:"玩家"對象包含生命值、位置等屬性,以及移動、攻擊等方法

對象是構建復雜軟件系統的基礎單元,通過對象間的交互和組合,可以實現更高級的功能和業務邏輯。

面向對象編程(OOP)是一種程序設計范式,它以"對象"為核心,將數據和操作數據的方法組織在一起。讓我們詳細回顧面向對象的三大基本特性:

  1. 封裝(相當于黑盒子)

    • 具體表現:將數據和操作數據的方法捆綁在一起
    • 實現方式:通過訪問修飾符(public/private/protected)控制訪問級別
    • 實際應用示例:
      • 銀行賬戶類:隱藏余額具體數值,只提供存/取款接口
      • 汽車類:隱藏發動機內部構造,只提供啟動/加速接口
    • 優勢:提高安全性,降低耦合度,便于維護
  2. 繼承(代碼復用機制)

    • 具體表現:子類繼承父類的屬性和方法
    • 實現方式:extends關鍵字
    • 實際應用示例:
      • 圖形類作為父類,圓形/矩形類繼承
      • 動物類作為父類,貓/狗類繼承
    • 優勢:減少重復代碼,提高可擴展性
  3. 多態(同一接口不同實現)

    • 具體表現:父類引用指向子類對象
    • 實現方式:方法重寫(Override)和接口實現
    • 實際應用示例:
      • 圖形類定義draw()方法,不同子類實現不同繪制方式
      • 支付接口,不同支付方式實現不同支付邏輯
    • 優勢:提高程序靈活性,增強可維護性

其他重要概念:

  • 抽象類:包含抽象方法的類,不能被實例化
  • 接口:完全抽象的類,只包含方法聲明
  • 對象關系:關聯、聚合、組合等
  • 設計原則:SOLID原則(單一職責、開閉原則等)

實際開發中的應用場景:

  1. GUI程序開發:按鈕、窗口等組件都是對象
  2. 游戲開發:角色、道具等都是對象
  3. 企業級應用:訂單、客戶等業務實體作為對象

常見面試問題擴展:

  • 重載(Overload)和重寫(Override)的區別
  • 抽象類和接口的使用場景
  • 組合優于繼承原則的理解
  • 設計模式中的面向對象應用

設計模式的起源與發展

設計模式的概念并非憑空產生,而是源于建筑學領域,后經計算機科學家的系統化整理和提煉,最終形成了我們今天所熟知的軟件設計模式體系。

建筑學領域的啟發

設計模式的概念最早可以追溯到1977年,由美國建筑師克里斯托弗·亞歷山大(Christopher Alexander)在其著作《建筑模式語言》(A Pattern Language)中提出。亞歷山大觀察到,在建筑設計中存在一些反復出現的優秀解決方案,他將其系統化為253個"模式",每個模式都描述了特定環境下的設計問題及其解決方案。

軟件工程的引入

1990年,Kent Beck和Ward Cunningham首次將模式概念引入軟件工程領域。他們發現軟件設計中同樣存在反復出現的問題和相應的優秀解決方案。這一發現為后來的軟件設計模式研究奠定了基礎。

GoF的里程碑貢獻

1994年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(被稱為"四人幫"或GoF)合著的《設計模式:可復用面向對象軟件的基礎》一書出版。這本著作系統地歸納了23種經典的設計模式,將它們分為創建型、結構型和行為型三大類,并提供了統一的描述格式:

  1. 模式名稱:便于交流的簡短標識
  2. 問題:描述何時應用該模式
  3. 解決方案:模式的具體內容
  4. 效果:模式的優勢和可能的缺點

后續發展

GoF的模式體系成為基礎后,設計模式研究持續發展:

  1. 領域擴展:陸續出現了并發模式、企業應用模式、分布式系統模式等
  2. 模式語言:形成了更系統化的模式分類和關系描述
  3. 反模式:研究常見的不良設計實踐及其解決方案
  4. 現代應用:在新興技術領域如微服務、云計算中繼續演化

設計模式的意義

設計模式的價值主要體現在:

  1. 共享詞匯:為開發者提供統一的交流語言
  2. 經驗復用:避免重復造輪子,繼承優秀設計經驗
  3. 設計指導:為解決特定問題提供經過驗證的方案
  4. 文檔工具:提高系統設計的可理解性和可維護性

設計模式不是一成不變的教條,而是需要根據具體場景靈活運用的工具。隨著軟件開發實踐的演進,設計模式體系也在不斷豐富和發展。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919129.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

有鹿機器人:AI技術如何重新定義「掃地」這件小事?

當掃地成為一門“技術活”掃地,可能是人類最古老的清潔行為之一。從掃帚到吸塵器,再到今天的無人駕駛清潔設備,我們一直在尋找更高效、更徹底的方式維護環境整潔。但有鹿機器人的出現,讓“掃地”這件事有了新的定義——它不再只是…

62.不同路徑

dp問題描述 62.不同路徑 確定本題的狀態表示 dp[i,j]表示的是從左上角走到這個位置的路徑條數 確定本題的狀態轉移方程 根據已知條件:dp[0,0]1,dp[0,1]1,dp[1,0]1 本題的狀態轉移方程是: dp[i,j]dp[i,j-1]dp[i-1,j] 填表求…

python---包

文章目錄包的基本概念創建包的基本結構__init__.py文件導入包和模塊相對導入(在包內部使用)導入包和導入模塊的區別包是Python中組織模塊的一種方式,它允許你將相關的模塊分組在一起,形成一個層次結構。包的主要目的是幫助避免命名…

超詳細yolov8/11-obb旋轉框全流程概述:配置環境、數據標注、訓練、驗證/預測、onnx部署(c++/python)詳解

因為yolo的檢測/分割/姿態/旋轉/分類模型的環境配置、訓練、推理預測等命令非常類似,這里不再詳細敘述環境配置,主要參考【超詳細yolo8/11-detect目標檢測全流程概述:配置環境、數據標注、訓練、驗證/預測、onnx部署(c/python)詳解】&#xf…

創世理論達成 全關聯的動態振動網:量子世界的“底層邏輯”

全關聯的動態振動網:量子世界的“底層邏輯”(不帶公式,超級詳細)要真正理解量子世界的本質,我們需要跳出“粒子”和“波”的傳統框架,從量子場論的核心邏輯出發,用最生活化的類比和日常經驗&…

銀行間交易IMIX協議加密相關

加密流程 字段篩選與序列化 提取業務報文中標記為敏感的字段&#xff0c;生成待加密的數據塊 <!-- 示例&#xff1a;原始交易指令 --> <Order><Symbol>ABC123</Symbol> <!-- 非敏感 --><Price>100.50</Price> …

ABM和強化學習-2015年全國大學生數學建模競賽B題

多智能體系統&#xff08;Agent-Based Model, ABM&#xff09;和強化學習&#xff08;Reinforcement Learning, RL&#xff09;是兩個不同但可結合的概念&#xff0c;尤其在復雜系統建模和人工智能領域有重要應用。下面分別解釋它們&#xff0c;并說明二者的關聯&#xff1a; …

ALBEF/BLIP/BLIP2/Instruct BLIP/X Instruct BLIP

ALBEF 研究動機 ALBEF之前的一些方式&#xff0c; 視覺分支基本都是基于 dector的方式&#xff08;檢出目標框&#xff09;&#xff0c;如下圖所示&#xff0c;由于大量的數據沒有標框&#xff0c;因此視覺預訓練的受限于dector的檢測方式。創新點 能不能不再采用dector的方式訓…

數據結構——排序算法(簡單篇:冒泡排序、選擇排序、插入排序)

1?? 冒泡排序&#xff08;Bubble Sort&#xff09; 基本思想 重復地比較相鄰的兩個元素&#xff0c;如果順序錯誤就交換它們。一趟冒泡結束后&#xff0c;最大&#xff08;或最小&#xff09;的元素會“浮”到末尾。下一趟時可以少比較一次&#xff0c;因為最后的元素已經排好…

配置 Docker 鏡像加速,解決 docker pull 拉取鏡像失敗、docker search 查詢鏡像失敗等問題

一、概述 記錄時間 [2025-08-16] 在 Docker 學習中&#xff0c;可能會遇到諸如 docker 遠程倉庫無法訪問、docker pull 拉取鏡像失敗、docker search 查詢鏡像失敗等問題。 這是由于國內網絡對 docker 遠程倉庫的訪問受到限制。 那么在國內如何獲取 docker 鏡像呢&#xff1f…

【Python】Python 面向對象編程詳解?

Python 面向對象編程詳解? 文章目錄Python 面向對象編程詳解?前言一、面向對象的基本概念?1.1 類&#xff08;Class&#xff09;?1.2 對象&#xff08;Object&#xff09;?1.3 屬性&#xff08;Attribute&#xff09;?1.4 方法&#xff08;Method&#xff09;?二、類的定…

Redis 緩存和 Redis 分布式鎖

目錄 Redis 緩存 (Caching) 目的 核心邏輯 存儲形式總結 典型場景 Redis 分布式鎖 (Distributed Lock) 目的 核心作用 核心邏輯 典型場景 核心區別總結 Redis 緩存 (Caching) 在Redis中&#xff0c;數據是以鍵值對的形式存儲的&#xff0c;其中鍵總是字符串類型&…

[ java 基礎 ] 了解編程語言的第一步

目錄 一. IDE (1). 使用IDE的原因: (2). 創建和使用: (3). 常用快捷方式與設置 (4). 注釋 (5). 關鍵字 (6). 標識符 (7). 變量 (8). 數據類型 1) 整數類型 2) 浮點類型 3) 布爾類型(boolean) 4) 字符類型(char) 5) 字符串 6) 基本數據類之間的轉換 (9). 運算符…

JavaScript 閉包與遞歸深度解析:從理論到實戰

本文將系統梳理 JavaScript 中閉包與遞歸的核心概念、實戰應用及面試要點,涵蓋課堂知識點、作業實現、面試題解析等內容,幫助你全面掌握這兩大重要概念。 一、閉包:函數與變量的綁定藝術 1.1 閉包的定義與核心特性 閉包是 JavaScript 中一種特殊的語言現象,其核心定義可…

牛 CDR3 單抗:抗病毒領域的 “納米級精準導彈”

一、病毒防御的天然克星病毒感染的核心難題在于其表面的 “糖衣炮彈”—— 以 HIV 為例&#xff0c;其 Env 蛋白表面密集的糖鏈形成物理屏障&#xff0c;傳統抗體難以穿透。而牛 CDR3 單抗的超長 CDR H3 結構&#xff08;50-60 個氨基酸&#xff09;如同 “納米探針”&#xff…

鴻蒙應用開發和Vue網頁開發中生命周期的區別

因為下節課就可以寫講解兩者生命周期代碼的實戰了&#xff0c;寫介紹一下理論方面的區別&#xff1a;鴻蒙應用開發&#xff08;ArkUI范式&#xff09;與Vue網頁開發在生命周期管理上的核心區別&#xff0c;這直接反映了原生OS應用與Web應用在架構哲學和運行環境上的根本差異??…

基于SpringBoot+Vue的輕手工創意分享平臺(WebSocket即時通訊、協同過濾算法、Echarts圖形化分析)

&#x1f388;系統亮點&#xff1a;WebSocket即時通訊、協同過濾算法、Echarts圖形化分析&#xff1b;一.系統開發工具與環境搭建1.系統設計開發工具后端使用Java編程語言的Spring boot框架 項目架構&#xff1a;B/S架構 運行環境&#xff1a;win10/win11、jdk17前端&#xff1…

Java應屆生求職八股(5)---并發編程篇

線程基礎線程與進程的區別進程是程序的一次執行過程。它資源分配的單位。線程是程序執行的單位。并行和并發的區別單核CPU下&#xff0c;線程串行。&#xff08;并發&#xff1a;多線程輪流使用一個或多個CPU&#xff09;多核CPU下&#xff0c;每個核都可調度線程。&#xff08…

WSL 配置文件 wsl.conf 設置

WSL .wslconfig 小技巧 要在 WSL&#xff08;Windows Subsystem for Linux&#xff09;中增加內存&#xff0c;你需要編輯 WSL 配置文件 wsl.conf 或者直接調整虛擬機的資源限制。 文章目錄WSL .wslconfig 小技巧以下是步驟&#xff1a; 找到或創建 .wslconfig 文件&#xff1…

9.從零開始寫LINUX內核——設置中斷描述符表

Linux 0.12 內核中斷描述符表&#xff08;IDT&#xff09;完整實現代碼以下是基于 setup 程序擴展的完整代碼&#xff0c;包含中斷描述符表&#xff08;IDT&#xff09;的定義、初始化及中斷處理程序&#xff0c;可直接用于實驗驗證&#xff1a;asm/* setup.s —— 4 扇區&…