【設計模式】前言

来源:https://www.cnblogs.com/xmuou/archive/2020/07/15/XMO.html
-Advertisement-
Play Games

本專欄內容均引用《大話設計模式》並做適當修改, 起因 有部分電腦專業的學生或有一定經驗的在職開發者,他們都知道類、方法、構造方法、甚至抽象類、介面等概念,並用各種IDE寫過不少的Windows或Web程式,但是當問到為什麼要用面向對象,它的好處在哪裡,卻沒有人能完整的講出來,多數人的反應是,概念知 ...


本專欄內容均引用《大話設計模式》並做適當修改,

起因

有部分電腦專業的學生或有一定經驗的在職開發者,他們都知道類、方法、構造方法、甚至抽象類、介面等概念,並用各種IDE寫過不少的Windows或Web程式,但是當問到為什麼要用面向對象,它的好處在哪裡,卻沒有人能完整的講出來,多數人的反應是,概念知道的,就是表達不清楚。

針對於此,在第一章中,將會以中國古代四大發明中活字印刷的例子,通過一個虛構的三國曹操作詩的情景,把面向對象的幾大好處講解一下,這樣比直接告訴面向對象有什麼好處更加容易理解和記憶

本專欄讀者

雖然本轉來不是給無任何編程經驗的人看的,對於想入這一行的朋友來說,找一門編程語言,從頭開始或許才是正道,而此專欄也不太適合有了多年面向對象開發經驗,對於常用的設計模式瞭如指掌的人看的,畢竟這裡更多的是一些基礎的東西

本專欄閱讀方法

建議按順序閱讀,如果您感覺由於面向對象知識的匱乏,例如對繼承、多態、介面、抽象類的理解不足,造成閱讀上的困難,不妨先閱讀附一的“培訓實習生——面向對象基礎”部分,然後再從第1章開始閱讀。如果您已經對不少設計模式熟悉,也不妨挑選不熟悉的模式章節閱讀。

關於本專欄的疑問解答

  1. 本書需要什麼基礎?

主要是C#或其他編程語言的基礎知識,如變數、分支判斷、迴圈、函數等編程基礎,關於面向對象基礎可參看本書的附錄一。

  1. 設計模式是否有必要全部學一遍?

答案是,Yes!別被那些說什麼設計模式大多用不上,根本不用全學的輿論所左右。儘管現在設計模式遠遠不止23種,對所有都有研究是不太容易的,在學習總結的23個設計模式過程中,你會被那些編程大師們進行偉大的技術思想洗禮,不斷增加自己對面向對象的深入理解,從而更好的把這種思想發揚光大。這就如同高中時學立體幾何感覺沒用,但當你裝修好房子購買傢俱時才知道,有空間感,懂得空間計算是如何的重要,你完全可能遇到買了一個大號的冰箱卻放不進廚房,或買了開關門的衣櫥(移門不占空間)卻因床在旁邊堵住了門而打不開的尷尬。

重要的不是你將來會不會用到這些模式,而是通過這些模式讓你找到“封裝變化”、“對象間鬆散耦合”、“針對介面編程”的感覺,從而設計出易維護、易擴展、易復用、靈活性好的程式。成為詩人後可能不需要刻意地按照某種模式去創作,但成為詩人前他們一定是認真地研究過成百上千的唐詩宋詞、古今名句。

如果說,數學是思維的體操,那設計模式,就是面向對象編程思維的體操。

  1. 我學了設計模式後時常會過度設計,如何辦?

建議,暫時現象,繼續努力。

設計模式有四境界:

1.沒學前是一點不懂,根本想不到用設計模式,設計的代碼很糟糕;

2.學了幾個模式後,很開心,於是到處想著要用自己學過的模式,於是時常造成誤用模式而不自知;

3.學完全部模式時,感覺諸多模式極其相似,無法分清模式之間的差異,有困惑,但深知誤用之害,應用之時有所猶豫;

4.靈活應用模式,甚至不應用具體的某種模式也能設計出非常優秀的代碼,以達到無劍勝有劍的境界。

不會用設計模式的人要遠遠超過過度使用設計模式的人,從這個角度講,因為怕過度設計而不用設計模式顯然是因噎廢食。當你認識到自己有過度使用模式的時候,那就證明你已意識到問題的存在,只有通過不斷的鑽研和努力,你才能突破“不識廬山真面目,只緣身在此山中”的瓶頸,達到“會當凌絕頂,一覽眾山小”的境界。

編程語言

本專欄所使用的語言均為JAVA,但也同樣適用其他一些面向對象語言的讀者閱讀來學習設計模式


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

-Advertisement-
Play Games
更多相關文章
  • var exp=undefinded; if(typeof(exp)=="undefined") { //變數是undefined的處理 } typeof 返回的是字元串,有六種可能:"number"、"string"、"boolean"、"object"、"function"、"undefined ...
  • 移動WEB開發的rem佈局 目標(目錄) 能夠使用rem單位 能夠使用媒體查詢的基本語法 能夠使用Less的基本語法 能夠使用Less中的嵌套 能夠使用Less中的運算 能夠使用2種rem適配方案 思考:1、頁面佈局文字能夠隨著屏幕大小的變化而變化? 2、流式佈局和flex佈局主要針對於寬度佈局,那 ...
  • layui table有多行數據,通過外部輸入內容,需要定位到指定行,選中改行,對改行進行操作。 實現效果: HTML代碼: 1 <body> 2 <div class="layui-fluid"> 3 <input type="text" id="txt_id" /> 4 <table class ...
  • 價格便宜50-100 有圖的(仿站無需圖) 包動畫效果 也可以包介面對接 太複雜的頁麵價格另算 有意加qq896705559 另出體溫單源碼 http://106.12.212.110:8077/#/ 線上地址 包括折線圖 虛線實線 下垂線 陰影區域等 自定義每日時間 按照醫院標準編寫 ...
  • 在“JavaScript圖形實例:曲線方程”一文中,我們給出了15個曲線方程繪製圖形的實例。這些曲線都是根據其曲線方程,在[0,2π]區間取一系列角度值,根據給定角度值計算對應的各點坐標,然後在計算出的坐標位置描點,從而繪製出曲線。 我們可以將曲線的繪製過程動態展示出來。 例如,對於星形線的繪製,編 ...
  • 許可權管理系統中,菜單也屬於許可權控制的一個資源,應該直接應用於角色,和許可權功能點一樣,屬於角色控制的一環。不同角色用戶,登錄系統後,出現的系統菜單是不同的。在VUE+Element 前端中,我們菜單結合路由集合,實現可訪問路由的過濾,也就實現了對應角色菜單的展示和可訪問路由的控制,詳細可以參考隨筆《循... ...
  • 2020 年真的是災禍頻發,但是在各類前端框架上,依舊是在穩步的推進。近日 Vue 團隊更新了關於 Vue 3 的最新狀態,尤大新增了三個語法糖特性,它們將用於優化 SFC 的開發體驗,你會有興趣嘗鮮試試麽~ 登高遠眺 天高地迥,覺宇宙之無窮 前端框架 Vue 3: 2020 年中的狀態更新 近日 ...
  • 橋接模式的概念與實現 為什麼叫橋接模式 橋接模式的適用場景 繼承是面向對象的三大特性之一,但很多時候使用繼承的結果卻不盡如人意。除了人盡皆知的緊耦合問題外,有的時候還會導致子類的快速膨脹。 設想這樣一個場景:最初設計的時候有一個類型Product,但後來隨著新需求的出現,X原因導致了它的變化,X有兩 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...