設計模式學習(下)

2021-04-18 10:09:59 字數 1750 閱讀 2556

對於掌握了一定設計模式知識的人,如何才能更進一步掌握、才能熟練應用設計模式,是一項迫切而且艱鉅的任務,所以根據自己的知識水平,我決定系統得分析設計模式知識結構,為更進一步分析各個設計模式做好知識和方法準備。

是軟體的產生直到報廢的生命週期,包括問題定義、可行性分析、總體描述、系統設計、編碼、除錯和測試、驗收與執行、維護公升級到廢棄等階段,這種按時間分程的思想方法是軟體工程中的一種思想原則,即按部就班、逐步推進,每個階段都要有定義、工作、審查、形成文件以供交流或備查,以提高軟體的質量。

初級軟體開發者比較容易忽視軟體開發周期中的執行階段和維護公升級階段。但是這是軟體生命週期中最長的階段,在這個階段需要對軟體的功能進行擴充套件,對錯誤進行糾正等。如果沒有對軟體進行這些完善和補充,軟體將不能存在,軟體將進入報廢,結束軟體生命。

軟體需求會不斷變化,導致軟體需求變化的原因很多,譬如軟體需求收集不完善、軟體需求表達不清楚、客戶業務變化等。總之軟體需求是不斷變化的,這簡直是乙個定律。

如果沒有進行良好架構的軟體,程式基本是按照功能分解方式進行編寫的,這樣的缺點很多,比如乙個功能可能在很多地方實現了,如果這個功能需要改變則會要改變很多地方;如果沒有良好設計的**,需要新增功能則需要修改原來老**,這樣做必然帶來風險,等等。

上面的問題歸結起來可以看有四點:過於僵硬、過於脆弱、復用率低、黏度過高

儘管軟體開發存在很多問題,但是上述**結構問題確實是乙個很大問題,如何解決好上述問題就擺在軟體開發者前面的乙個迫切任務

從產品層看,軟體設計目標有兩個,乙個是軟體復用;二是軟體可維護

乙個軟體維護時間是開發時間的幾十倍甚至更多,所以軟體的維護費用也是開發費用的幾倍,所以乙個維護性好的軟體的重要性不言而喻。

軟體的良好可復用性能夠高效率地生產產品和能夠產生高質量產品。

由於軟體設計是直接為編碼服務的,所以要從編碼的角度看軟體設計的目標。從編碼看軟體設計的目標是實現開閉目標,經過設計的**結構對修改關閉,對擴充套件開放。通過擴充套件已有的軟體系統,可以提供新的行為,以滿足對軟體的新需求,使變化中的軟體系統有一定的適應性和靈活性;已有的軟體模組,特別是重要的抽象的模組不能修改,這就使變化中的軟體系統有一定的穩定性和延續性物件

多型 繼承從**角度看:開閉原則

依賴倒轉原則(物件間關係):要依賴於抽象,不要依賴於具體 合成

/聚合原則(物件間關係):盡量使用合成

/聚合達到復用,而不是使用繼承

迪公尺特法則(物件間關係):乙個軟體實體應當盡可能少的與其他實體發生聯絡

介面隔離原則(編碼):應當為客戶提供盡可能小的介面,而不是大的總介面

物件:擁有某種責任的東西。物件應該對自己負責,並且這種責任應該被清楚地定義出來

從分析角度看:避免過早處理細節

從分析角度:發現並封裝變化

從編碼角度:針對介面程式設計

設計應該由對問題的乙個簡單陳述開始,然後通過向這個陳述中加入資訊使它變得更詳細(複雜)

從模式的方法思考:從場景進行設計

包容變化原則:決不讓乙個類包含兩件變化並以某種方式耦合在一起的事務

通過矩陣分析,找到變化的因素

從編碼看,乙個功能方法只能實現一次

從編碼角度:分離呼叫者和被呼叫者,減少他們之間依賴

如果把軟體系統看成是物件的集合,則從區域性範圍內,模式告訴我們如何在模式的場景內解決特定的問題;在全域性範圍內,模式建立一張關於應用程式的元件之間如何相互關聯的圖;如果把軟體看成事**的集合,則設計模式的本質是把**裡變化的那一部分分離出來。學習設計模式是學習如何在區域性和全域性範圍內使用它們;學習設計模式也是學習他們的機制,以及作為他們基礎的原則和策略;學習設計模式還是學習推演設計模式,掌握單個模式意圖區別。

學習設計模式 原型設計模式

先想一下既然要建立新的例項,為什麼不直接使用 new 而要設計出乙個原型模式進行例項的複製呢?這是因為 有的時候,我們也會在不指定類名的前提下生成例項,例如像圖形編輯器中拖動現有的模型工具製作圖形的例項,這種是非常典型的生成例項的過程太過複雜,很難根據類來生成例項場景,因此需要根據現有的例項來生成新...

設計模式,Let s 「Go」! 下

接上篇 設計模式,let s go 中 繼續更新設計模式,今天介紹的設計模式有責任鏈模式 蠅量模式 直譯器模式 中介者模式 備忘錄模式 原型模式和訪問者模式 文章對設計模式的特點和使用場景進行了總結,每個設計模式分配的篇幅較少,給了解過設計模式的作為速查,幫不了解設計模式的入門,當然具體實現才是重點...

設計模式學習

知道設計模式已經很久了,但是一直沒有認真的去系統的學習,這幾天才開始逐漸的學習起來。下面是我學習設計模式的一些心得。要想成為一名優秀的軟體設計師或軟體架構設計師,了解一些設計模式是很有必要的。我認為學習設計模式的思路如下 一 基本概念 理解物件導向 理解重用等概念性的東西 1.什麼是物件導向?2.物...