




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
軟件架構設計實戰(zhàn)——基于SSM框架Software
Architecture
Design
Practice
Based
on
SSM
Framework第1章軟件設計模式導論123軟件設計模式概述軟件設計模式的基本原則使用設計模式的優(yōu)點軟件設計模式概述軟件設計模式是軟件設計中常見問題的典型解決方案,就像能根據(jù)需求進行調整的預制藍圖,可用于解決軟件項目開發(fā)中反復出現(xiàn)的設計問題。與方法或庫的使用方式不同特定的代碼與算法的區(qū)別11.1軟件設計模式產生的背景“設計模式”這個術語最初并不是出現(xiàn)在軟件設計中,而是被用于建筑領域的設計中。《建筑模式語言:城鎮(zhèn)、建筑、構造》《建筑的永恒之道》設計模式思想應用在Smalltalk中的圖形用戶接口的生成中軟件工程界才開始研討設計模式的話題1977年1979年1987年1990年1995年《設計模式:可復用面向對象軟件的基礎》啟發(fā):設計模式產生的重要性——GoF四人組——23個經典設計模式1.1軟件設計模式產生的背景GoF四人組合著的《設計模式》并不是一種具體“技術”,它講述的是思想,它不僅僅展示了接口或抽象類在實際案例中的靈活應用和超人智慧,讓你能夠真正掌握接口或抽象類的應用,從而在原來的Java語言基礎上躍進一步,更重要的是,GoF反復強調一個宗旨:要讓程序盡可能的重用。這其實在做一個極限挑戰(zhàn):在軟件項目開發(fā)中唯一不變就是如何應對不斷變化的需求。但是我們還是要尋找出不變的東西,并將它和變化的東西分離開來,這需要非常的智慧和經驗。1.2軟件設計模式的基本要素軟件設計模式使人們可以更加簡單方便地復用成功的設計和體系結構。模式名稱(PatternName)問題(Problem)解決方案(Solution)效果(Consequence)2軟件設計模式的基本原則設計模式是從實際業(yè)務當中抽取出來,然后進行抽象,形成一種通用的解決問題的思路,是從具體到抽象的過程;在解決實際問題的時候,不能生搬硬套的使用某一種設計模式,而要考慮該問題與哪種設計模式的應用場景、特征相匹配,從而選擇某個或多個設計模式。2.1開閉原則開閉原則(OpenClosedPrinciple,OCP)由勃蘭特·梅耶(BertrandMeyer)提出,他在1988年的著作《面向對象軟件構造》(ObjectOrientedSoftwareConstruction)中提出:軟件實體應當對擴展開放,對修改關閉(Softwareentitiesshouldbeopenforextension,butclosedformodification),這就是開閉原則的經典定義。開閉原則的含義是:當軟件項目的應用需求改變時,在不修改軟件實體的源代碼或者二進制代碼的前提下,可以擴展模塊的功能,使其滿足新的需求。2.1開閉原則1.開閉原則的作用:(1)降低軟件測試的工作量:如果軟件開發(fā)遵守開閉原則,軟件測試時只需要對擴展的代碼進行測試,因為原有的測試代碼仍然能夠正常運行。(2)提高代碼的可復用性:在軟件項目開發(fā)中,項目模塊粒度越小,被復用的可能性就越大,在遵守開閉原則的情況下,通過對原有模塊的擴展能夠提高代碼的可復用性。(3)提高軟件項目的可維護性:遵守開閉原則的軟件項目,其基礎代碼(模塊)越來越穩(wěn)固,在項目維護的過程中,工作量會大大減少,降低維護成本。2.1開閉原則2.開閉原則的實現(xiàn)方法可以通過“抽象約束、封裝變化”來實現(xiàn)開閉原則,即通過接口或者抽象類為軟件實體定義一個相對穩(wěn)定的抽象層,而將相同的可變因素封裝在相同的具體實現(xiàn)類中。因為抽象靈活性好,適應性廣,只要抽象的合理,可以基本保持軟件架構的穩(wěn)定。而軟件中易變的細節(jié)可以從抽象派生來的實現(xiàn)類來進行擴展,當軟件需求發(fā)生變化時,只需要根據(jù)新需求重新派生一個實現(xiàn)類來擴展就可以完成。開閉原則也是在軟件項目開發(fā)中最為重要的一個基本原則。2.1開閉原則3.示例:開閉原則的使用——Windows的桌面主題設計2.2里氏代換原則里氏替換原則(LiskovSubstitutionPrinciple,LSP)由麻省理工學院計算機科學實驗室的里斯科夫(Liskov)女士在1987年的“面向對象技術的高峰會議”(OOPSLA)上發(fā)表的一篇文章《數(shù)據(jù)抽象和層次》(DataAbstractionandHierarchy)里提出來的,她提出:繼承必須確保超類所擁有的性質在子類中仍然成立(Inheritanceshouldensurethatanypropertyprovedaboutsupertypeobjectsalsoholdsforsubtypeobjects)。2.2里氏代換原則1.里氏替換原則的作用(1)里氏替換原則是實現(xiàn)開閉原則的重要方式之一。(2)里氏替換原則克服了繼承中重寫父類方法造成的可復用性變差的缺點。(3)里氏替換原則是動作正確性的保證。即類的擴展不會給已有的系統(tǒng)引入新的錯誤,降低了代碼出錯的可能性。(4)里氏替換原則增強了程序的健壯性,在項目需求變更時可以做到非常好的兼容性,提高程序的可維護性、可擴展性,降低需求變更時引入風險的概率。2.2里氏代換原則2.里氏替換原則的實現(xiàn)方法(1)子類可以實現(xiàn)父類的抽象方法,但不能覆蓋父類的非抽象方法;(2)子類中可以增加自己特有的方法;(3)當子類的方法重載父類的方法時,方法的前置條件(即方法的輸入?yún)?shù))要比父類的方法更寬松;這樣做的目的是確保能夠調用到父類被重載的方法,在子類繼承父類的過程中,不能由于繼承,而讓父類的某些方法無法被調用。(4)當子類的方法實現(xiàn)父類的方法時(重寫/重載或實現(xiàn)抽象方法),方法的后置條件(即方法的輸出/返回值)要比父類的方法更嚴格或相等。例如:父類的某個方法返回值的數(shù)據(jù)類型T,子類相同方法(重載或者重寫)返回值的數(shù)據(jù)類型為S,那么里氏替換原則就要求S必須小于等于T。2.2里氏代換原則通過重載父類的方法來完成新的功能寫起來雖然簡單,但是整個繼承體系的可復用性會變差,特別是運用多態(tài)比較頻繁時,程序運行出錯的概率就會增大。關于里氏替換原則的例子,最有名的是“正方形不是長方形”。當然,生活中也有很多類似的例子,例如,企鵝和鴕鳥從生物學的角度來劃分,它們屬于鳥類;但從類的繼承關系來看,由于它們不能繼承“鳥”會飛的功能,所以它們不能定義成“鳥”的子類;同樣,由于“氣球魚”不會游泳,所以不能定義成“魚”的子類;“玩具炮”上不了戰(zhàn)場,所以不能定義成“炮”的子類等。2.2里氏代換原則示例2:里氏替換原則——“鴕鳥不是鳥”的類設計2.3依賴倒轉原則依賴倒置原則的原始定義為:高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節(jié),細節(jié)應該依賴抽象(Highlevelmodulesshouldnotdependuponlowlevelmodules.Bothshoulddependuponabstractions.Abstractionsshouldnotdependupondetails.Detailsshoulddependuponabstractions)。其核心思想是:要面向接口編程,不要面向實現(xiàn)編程。2.3依賴倒轉原則1.依賴倒置原則的作用(1)依賴倒置原則可以降低類間的耦合性。(2)依賴倒置原則可以提高系統(tǒng)的穩(wěn)定性。(3)依賴倒置原則可以減少并行開發(fā)引起的風險。(4)依賴倒置原則可以提高代碼的可讀性和可維護性。2.3依賴倒轉原則2.依賴倒置原則的實現(xiàn)方法依賴倒置原則的目的是通過面向接口的編程來降低類間的耦合性,所以我們在實際編程中只要遵循以下四點,就能在項目中滿足這個原則。(1)每個類盡量提供接口或抽象類,或者兩者都具備。(2)變量的聲明類型盡量用接口或者是抽象類。(3)任何類都不應該從具體類派生。(4)使用繼承時盡量遵循里氏替換原則。2.3依賴倒轉原則依賴倒置原則在Spring框架的IOC中具有重要的應用,同時在SpringMVC框架以及MyBatis框架中也有很多應用點。示例3:依賴倒置原則——顧客購物程序中的類設計2.4單一職責原則單一職責原則(SingleResponsibilityPrinciple,SRP)又稱單一功能原則,也是由羅伯特·C·馬?。≧obertCMartin)于《敏捷軟件開發(fā):原則、模式和實踐》一書中提出的。這里的職責是指類變化的原因,單一職責原則規(guī)定一個類應該有且僅有一個引起它變化的原因,否則類應該被拆分(Thereshouldneverbemorethanonereasonforaclasstochange)。該原則提出對象不應該承擔太多職責,如果一個對象承擔了太多的職責,至少存在以下兩個缺點:(1)一個職責的變化可能會削弱或者抑制這個類實現(xiàn)其他職責的能力;(2)當調用者需要該類的某一個職責時,不得不將其他不需要的職責全都包含進來,從而造成冗余代碼或代碼的浪費。2.4單一職責原則1.單一職責原則的優(yōu)點單一職責原則的核心就是控制類的粒度大小、將對象解耦、提高其內聚性。遵循單一職責原則將有以下優(yōu)點。(1)降低類的復雜度。一個類只負責一項職責,其邏輯肯定要比負責多項職責更簡單。(2)提高類的可讀性。由于類的職責單一、復雜性降低,代碼的可讀性就更好。(3)提高系統(tǒng)的可維護性。每個類都專注于單一業(yè)務,項目在維護中自然更容易。(4)變更引起的風險降低。變更在軟件項目開發(fā)中是不可避免的,遵守單一職責原則,當修改一個功能時,可以顯著降低對其他功能的影響。2.4單一職責原則2.單一職責原則的實現(xiàn)方法單一職責原則是最簡單但又最難靈活運用的原則,需要設計人員發(fā)現(xiàn)類的不同職責并將其分離,再封裝到不同的類或模塊中。而發(fā)現(xiàn)類的多重職責需要設計人員具有較強的分析設計能力和相關重構經驗。下面以大學學生工作管理程序為例介紹單一職責原則的應用。2.4單一職責原則示例3:單一職責原則——大學學生管理工作的類設計大學學生工作主要包括學生生活輔導和學生學業(yè)指導兩個方面的工作,其中生活輔導主要包括班委建設、出勤統(tǒng)計、心理輔導、費用催繳、班級管理等工作,學業(yè)指導主要包括專業(yè)引導、學習輔導、科研指導、競賽輔導等工作。2.5接口隔離原則接口隔離原則(InterfaceSegregationPrinciple,ISP)要求程序員盡量將臃腫龐大的接口拆分成更小的和更具體的接口,讓接口中只包含客戶必須使用方法的最小集合。2002年羅伯特·C·馬丁給“接口隔離原則”的定義是:客戶端不應該被迫依賴于它不使用的方法(Clientsshouldnotbeforcedtodependonmethodstheydonotuse)。該原則還有另外一個定義:一個類對另一個類的依賴應該建立在最小的接口上(Thedependencyofoneclasstoanotheroneshoulddependonthesmallestpossibleinterface)。2.5接口隔離原則接口隔離原則和單一職責都是為了提高類的內聚性、降低它們之間的耦合性,體現(xiàn)了封裝的思想,但兩者是不同的:(1)單一職責原則注重的是職責,而接口隔離原則注重的是對接口依賴的隔離。(2)單一職責原則主要是約束類,它針對的是程序中的實現(xiàn)和細節(jié);接口隔離原則主要約束接口,主要針對抽象和程序整體框架的構建。2.5接口隔離原則1.接口隔離原則的優(yōu)點(1)將臃腫龐大的接口分解為多個粒度小的接口,可以預防外來變更的擴散,提高系統(tǒng)的靈活性和可維護性。(2)接口隔離提高了系統(tǒng)的內聚性,減少了對外交互,降低了系統(tǒng)的耦合性。(3)接口的粒度大小定義合理,能夠保證系統(tǒng)的穩(wěn)定性;但是,如果定義過小,則會造成接口數(shù)量過多,使設計復雜化;如果定義太大,靈活性降低,無法提供定制服務,給整體項目帶來無法預料的風險。(4)使用多個專門的接口還能夠體現(xiàn)對象的層次,因為可以通過接口的繼承,實現(xiàn)對總接口的定義。(5)能減少項目工程中的代碼冗余。過大的接口里面通常放置許多不用的方法,當實現(xiàn)這個接口的時候,被迫設計冗余的代碼。2.5接口隔離原則2.接口隔離原則的實現(xiàn)方法在具體應用接口隔離原則時,應該注意以下事項。(1)接口盡量小,但是要有限度。一個接口只服務于一個子模塊或業(yè)務邏輯。(2)為依賴接口的類定制服務。只提供調用者需要的方法,屏蔽不需要的方法。(3)了解環(huán)境,拒絕盲從。每個項目或服務都有特定的應用領域和業(yè)務環(huán)境,要求不同,接口拆分的標準就不同,需要深入了解業(yè)務邏輯。(4)提高內聚,減少對外交互。使接口用最少的方法去完成更多的工作。2.5接口隔離原則示例4:接口隔離原則——學生成績管理的類設計2.6迪米特法則迪米特法則(LawofDemeter,LoD)又稱之為最少知識原則(LeastKnowledgePrinciple,LKP),產生于1987年美國東北大學(NortheasternUniversity)的一個名為迪米特(Demeter)的研究項目,由伊恩·荷蘭(IanHolland)提出,被UML創(chuàng)始者之一的布奇(Booch)普及,后來又因為在經典著作《程序員修煉之道》(ThePragmaticProgrammer)提及而廣為人知。迪米特法則的定義是:只與你的直接朋友交談,不跟“陌生人”說話(Talkonlytoyourimmediatefriendsandnottostrangers)。其含義是:如果兩個軟件實體無須直接通信,那么就不應當發(fā)生直接的相互調用,可以通過第三方轉發(fā)該調用。其目的是降低類之間的耦合度,提高模塊的相對獨立性。2.6迪米特法則1.迪米特法則的優(yōu)點迪米特法則要求限制軟件實體之間通信的寬度和深度,正確使用迪米特法則將有以下兩個優(yōu)點。(1)降低了類之間的耦合度,提高了模塊的相對獨立性。(2)由于耦合度降低,從而提高了類的可復用率和系統(tǒng)的擴展性。但是,過度使用迪米特法則會使系統(tǒng)產生大量的中介類,從而增加系統(tǒng)的復雜性,使模塊之間的通信效率降低。所以,在釆用迪米特法則時需要反復權衡,確保高內聚和低耦合的同時,保證系統(tǒng)的結構清晰。2.6迪米特法則2.迪米特法則的實現(xiàn)方法從迪米特法則的定義和特點可知,它強調以下兩點:(1)從依賴者的角度來說,只依賴應該依賴的對象。(2)從被依賴者的角度說,只暴露應該暴露的方法。2.6迪米特法則在運用迪米特法則時要注意以下六點:(1)在類的劃分上,應該創(chuàng)建弱耦合的類。類與類之間的耦合越弱,就越有利于實現(xiàn)可復用的目標。(2)在類的結構設計上,盡量降低類成員的訪問權限。(3)在類的設計上,優(yōu)先考慮將一個類設置成不變類。(4)在對其他類的引用上,將引用其他對象的次數(shù)降到最低。(5)不暴露類的屬性成員,而應該提供相應的訪問器(setter和getter方法)。(6)謹慎使用序列化(Serializable)功能。2.6迪米特法則示例5:迪米特法則——藝人與經紀人的類設計2.7合成復用原則合成復用原則(CompositeReusePrinciple,CRP)又叫組合/聚合復用原則(Composition/AggregateReusePrinciple,CARP),它要求在軟件復用時,要盡量先使用組合或者聚合等關聯(lián)關系來實現(xiàn),其次才考慮使用繼承關系來實現(xiàn)。如果要使用繼承關系,則必須嚴格遵循里氏替換原則。合成復用原則同里氏替換原則相輔相成的,兩者都是開閉原則的具體實現(xiàn)規(guī)范。2.7合成復用原則1.合成復用原則的重要性
通常類的復用分為繼承復用和合成復用兩種,繼承復用雖然有簡單和易實現(xiàn)的優(yōu)點,但它也存在以下三個缺點:(1)繼承復用破壞了類的封裝性。因為繼承會將父類的實現(xiàn)細節(jié)暴露給子類,父類對子類是透明的,所以這種復用又稱為“白箱”復用。(2)子類與父類的耦合度高。父類實現(xiàn)的任何改變都會導致子類的實現(xiàn)發(fā)生變化,這不利于類的擴展與維護。(3)限制了復用的靈活性。從父類繼承而來的實現(xiàn)(屬性和方法)是靜態(tài)的,在編譯時已經確定,所以在運行時不可能發(fā)生變化。2.7合成復用原則三個優(yōu)點:(1)維持了類的封裝性。因為成員對象的內部細節(jié)是新對象看不見的,所以這種復用又稱為“黑箱”復用。(2)類之間的耦合度低。這種復用所需的依賴較少,新對象存取成員對象的唯一方法是通過成員對象的接口。(3)復用的靈活性高。這種復用可以在運行時動態(tài)進行,新對象可以動態(tài)地引用與成員對象類型相同的對象。2.7合成復用原則2.合成復用原則的實現(xiàn)方法合成復用原則是通過將已有的對象納入新對象中,作為新對象的成員對象來實現(xiàn)的,新對象可以調用已有對象的功能,從而達到復用。該原則在軟件開發(fā)框架,例如:MyBatis中,具有廣泛的應用。2.7合成復用原則示例6:合成復用原則——汽車分類管理的類設計2.7合成復用原則總結
本節(jié)介紹的7種基本原則,是各種軟件設計模式的基礎,是各種設計模式都要遵守的規(guī)范,其目的只有一個:降低對象之間的耦合,增加程序的可復用性、可擴展性和可維護性。對于這些基本規(guī)則,可以歸納為:訪問加限制,函數(shù)要節(jié)儉,依賴要減少,動態(tài)加接口,父類要抽象,擴展不更改。
就像我們在日常生活中,在做事情之前都要先定好規(guī)則,對做事情增加一些約束和限制,確保不越界?!皼]有規(guī)矩,不成方圓”,凡事都有其固有的規(guī)律。人們要想實現(xiàn)預期的目的,就必須按其規(guī)律行事。3使用設計模式的優(yōu)點設計模式的本質是面向對象設計原則的實際運用,是對類的封裝性、繼承性和多態(tài)性以及類的各種關聯(lián)關系的在實際應用中的經驗總結。在軟件開發(fā)中遵循軟件設計模式的規(guī)范要求,能夠使代碼的編寫更加規(guī)范、高效、易懂,在應用能夠更好的做到代碼復用。3.1項目代碼優(yōu)劣的評價原則代碼是所有軟件項目都具有的“成果”,是軟件實現(xiàn)的“基本零件”,也是軟件產品中最真實的存在,類似構成硬件產品的基本組件。1.可維護性2.可理解性3.可擴展性4.可復用性3.2使用設計模式帶來的變化
在軟件項目開發(fā)中正確使用軟件設計模式,不僅能夠提高軟件項目的健壯性和容錯能力,同時還能夠減少項目開發(fā)的工作量,節(jié)約項目成本。同時能夠提高程序員的思維能力、編程能力和設計能力;還可以使程序設計更加標準化、代碼編制更加工程化,使軟件開發(fā)效率大大提高,從而縮短軟件的開發(fā)周期。
當然,軟件設計模式只是一個引導,在具體的軟件開發(fā)中,必須根據(jù)設計的應用系統(tǒng)特點和要求來恰當選擇。對于簡單的程序開發(fā),若能寫一個簡單的算法要比引入某種設計模式更加容易。但對大項目的開發(fā)或者框架設計,用設計模式來組織代碼顯然更好,這也是現(xiàn)在大型軟件系統(tǒng)開發(fā)所采用的方式。4習題1.開閉原則的核心思想是什么?2.依賴倒置原則在項目開發(fā)中如何體現(xiàn)?3.單一職責原則與接口隔離原則的聯(lián)系與區(qū)別是什么?4.面向對象程序設計中的類繼承關系與合成復用原則的區(qū)別是什么?5.遵循軟件設計模式在軟件項目開發(fā)中能夠帶來什么樣的好處?軟件架構設計實戰(zhàn)——基于SSM框架Software
Architecture
Design
Practice
Based
on
SSM
Framework第2章典型軟件設計模式123單例模式原型模式工廠模式4建造者模式5代理模式6MVC模式單例模式
單例(Singleton)模式是指一個類只有一個實例,且該類能自行創(chuàng)建這個實例的一種軟件設計模式。例如,Windows中只能打開一個任務管理器,這樣可以避免因打開多個任務管理器窗口而造成內存資源的浪費,或出現(xiàn)各個窗口顯示內容的不一致等錯誤。
單例模式在現(xiàn)實生活中的應用也非常廣泛,例如公司CEO、部門經理等都屬于單例模型。J2EE標準中的ServletContext和ServletContextConfig、Spring框架應用中的ApplicationContext、數(shù)據(jù)庫中的連接池等也都是單例模式。1單例模式單例模式主要具有3個特點:1.單例類只有一個實例對象;2.該單例對象必須由單例類自行創(chuàng)建;3.單例類對外提供一個訪問該單例的全局訪問點。1單例模式單例模式在應用當中較為方便,且生命周期管理也比較簡單,主要優(yōu)點包括以下3個方面:①
單例模式可以保證內存里只有一個實例,減少了內存的開銷。②
單例模式可以避免對資源的多重占用。③
單例模式設置全局訪問點,可以優(yōu)化和共享資源的訪問。1單例模式單例模式主要有以下3個方面的缺點:①
單例模式一般沒有接口,擴展困難。如果要擴展,則除了修改原來的代碼,沒有第二種途徑,違背開閉原則。②
在并發(fā)測試中,單例模式不利于代碼調試。在調試過程中,如果單例中的代碼沒有執(zhí)行完,也不能模擬生成一個新的對象。③
單例模式的功能代碼通常寫在一個類中,如果功能設計不合理,則很容易違背單一職責原則。1單例模式單例模式的應用場景主要有以下5個方面。1.需要頻繁創(chuàng)建的一些類,使用單例模式可以降低系統(tǒng)的內存壓力,減少垃圾回收(GarbageCollection簡稱GC)頻率。2.某個類在運行期間只能生成一個對象的時候,如SpringMVC框架中的核心控制器DispatchServlet實例。3.某些類創(chuàng)建實例時占用資源較多,或實例化耗時較長,且經常使用,例如MyBatis框架中的SqlSessionFactory實例。4.某類需要頻繁實例化,而創(chuàng)建的對象又頻繁被銷毀的時候,如多線程的線程池、網絡連接池等。5.某個實例需要在應用中被共享使用,由于單例模式只允許創(chuàng)建一個對象,共享該對象可以節(jié)省內存,并加快對象訪問速度。如Web應用中的配置管理對象。1單例模式單例模式的結構在單例模式中必須由所在類來完成對象的創(chuàng)建,然后供其他類調用,一般稱之為單例類;在訪問類中通過單例類提供的靜態(tài)方法獲取單例類的實例,然后調用相應方法。1單例模式單例模式的實現(xiàn)①懶加載單例模式publicclassLazySingleton{privatestaticvolatileLazySingletoninstance=null;//保證instance在所有線程中同步privateLazySingleton(){//private避免類在外部被實例化}publicstaticsynchronizedLazySingletongetInstance(){//getInstance方法前加同步if(instance==null){instance=newLazySingleton();}returninstance;}}1單例模式單例模式的實現(xiàn)②預加載單例模式publicclassPreSingleton{privatestaticfinalPreSingletoninstance=newPreSingleton();privatePreSingleton(){}publicstaticPreSingletongetInstance(){returninstance;}}1原型模式
在有些系統(tǒng)中,存在大量相同或相似對象的創(chuàng)建問題,如果用傳統(tǒng)的構造函數(shù)來創(chuàng)建對象,會比較復雜且耗時耗資源,用原型模式生成對象就比較高效。
2原型模式1.原型模式的定義與特點原型(Prototype)模式是指用一個已經創(chuàng)建好的實例作為原型,通過復制該原型對象來創(chuàng)建一個和原型相同或相似的新對象。用這種方式創(chuàng)建對象非常高效,根本無須知道對象創(chuàng)建的細節(jié)。而且Java自帶的原型模式基于內存二進制流的復制,在性能上比直接創(chuàng)建(new)一個對象更加優(yōu)良。同時可以使用深克隆方式保存對象的狀態(tài),使用原型模式將對象復制一份,并將其狀態(tài)保存起來,簡化了創(chuàng)建對象的過程,以便在需要的時候使用(例如恢復到歷史某一狀態(tài)),可輔助實現(xiàn)撤銷操作。2原型模式2.原型模式的應用場景(1)對象之間相同或相似,即只是個別的幾個屬性不同的時候。(2)創(chuàng)建對象成本較大,例如初始化時間長,占用CPU太多,或者占用網絡資源太多等,需要優(yōu)化資源。(3)創(chuàng)建一個對象需要繁瑣的數(shù)據(jù)準備或訪問權限等,需要提高性能或者提高安全性。(4)系統(tǒng)中大量使用該類對象,各個調用者都需要給它的屬性重新賦值。在Spring中,原型模式應用的非常廣泛,例如scope=‘prototype’、JSON.parseObject()等都是原型模式的具體應用。2原型模式3.原型模式的結構由于Java提供了對象的clone()方法,所以用Java實現(xiàn)原型模式很簡單。原型模式包含以下3個主要角色:(1)抽象原型類:規(guī)定了具體原型對象必須實現(xiàn)的接口。(2)具體原型類:實現(xiàn)抽象原型類的clone()方法,它是可被復制的對象。(3)訪問類:使用具體原型類中的clone()方法來復制新的對象。2原型模式
2原型模式的類結構圖原型模式4.原型模式的實現(xiàn)原型模式的克隆分為淺克隆和深克隆。淺克?。簞?chuàng)建一個新對象,新對象的屬性和原來對象完全相同,對于非基本類型屬性,仍指向原有屬性所指向的對象的內存地址。深克隆:創(chuàng)建一個新對象,屬性中引用的其他對象也會被克隆,不再指向原有對象地址。Java中的Object類提供了淺克隆的clone()方法,具體原型類只要實現(xiàn)Cloneable接口就可實現(xiàn)對象的淺克隆,這里的Cloneable接口就是抽象原型類。2原型模式2//具體原型類classRealizetypeimplementsCloneable{Realizetype(){System.out.println("具體原型創(chuàng)建成功!");}publicObjectclone()throwsCloneNotSupportedException{System.out.println("具體原型復制成功!");return(Realizetype)super.clone();}}//原型模式的測試類publicclassPrototypeTest{@Testpublicvoidtest()throwsCloneNotSupportedException{RealizeTypeo1=newRealizeType();RealizeTypeo2=(RealizeType)o1.clone();System.out.println("o1==o2?"+(o1==o2));}}工廠模式
工廠模式在框架應用中是最常見的軟件設計模式,例如Spring框架、Struts框架等,工廠模式主要分為3種類型:簡單工廠模式、工廠方法模式和抽象工程模式。
現(xiàn)實生活中,原始社會是自給自足,所有需要都是自己生產(沒有工廠),農耕社會就存在一些小作坊、民間酒坊等(簡單工廠模式),在工業(yè)革命時代就出現(xiàn)了流水線生產(工廠方法模式),在現(xiàn)代產業(yè)鏈中就出現(xiàn)了代工廠(抽象工廠模式),一些企業(yè)只做研發(fā)和設計(例如蘋果公司等),而另外一些企業(yè)只負責生產(例如富士康等)。軟件項目代碼同樣是由簡到繁一步一步迭代而來的,但對于調用者來說,采用工廠模式卻是越來越簡單。
工廠模式最主要的目的就是把“對象的創(chuàng)建與使用相分離”,工廠只負責對象的創(chuàng)建,而使用者只負責調用。在工廠模式中,被創(chuàng)建的對象成為“產品”,把創(chuàng)建產品的對象成為“工廠”。33.1簡單工廠模式在應用中,如果要創(chuàng)建的產品不多,只要一個工廠類就可以完成,這種模式叫“簡單工廠模式”。在簡單工廠模式中創(chuàng)建對象的方法通常為靜態(tài)(static)方法,因此簡單工廠模式(SimpleFactoryPattern)又稱為靜態(tài)工廠方法模式(StaticFactoryMethodPattern)。3.1簡單工廠模式1.簡單工廠模式的優(yōu)點:①在工廠類中包含了必要的邏輯判斷,可以決定在什么時候創(chuàng)建哪一個產品的實例。調用者可以很方便的創(chuàng)建出相應的產品。工廠和產品的職責區(qū)分明確;②調用者無需知道所創(chuàng)建具體產品的類名,只需知道相應參數(shù)即可;③也可以引入配置文件,在不修改調用者代碼的情況下更換和添加新的具體產品類。3.1簡單工廠模式2.簡單工廠模式的缺點:①簡單工廠模式的工廠類單一,負責所有產品的創(chuàng)建,職責過重,一旦異常,整個系統(tǒng)將受影響,且工廠類代碼會非常臃腫,違背高聚合原則;②使用簡單工廠模式會增加系統(tǒng)中類的個數(shù)(引入新的工廠類),增加系統(tǒng)的復雜度和理解難度;③系統(tǒng)擴展困難,一旦增加新產品不得不修改工廠邏輯,在產品類型較多時,可能造成邏輯過于復雜;④簡單工廠模式使用了static工廠方法,造成工廠角色無法形成基于繼承的等級結構。3.1簡單工廠模式簡單工廠模式的類結構圖3.2工廠方法模式
簡單工廠模式每增加一個產品就要增加一個具體產品類和一個對應的具體工廠類,這增加了系統(tǒng)的復雜度,違背了“開閉原則”。工廠方法模式是對“工廠”做進一步的抽象,得到抽象工廠,然后由具體工廠實現(xiàn)抽象工廠并負責某一產品的生產。工廠方法模式可以使系統(tǒng)在不修改原來代碼的情況下引進新的產品,即滿足開閉原則。3.2工廠方法模式工廠方法模式的優(yōu)點:①用戶只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體創(chuàng)建過程;②靈活性增強,對于新產品的創(chuàng)建,只需多寫一個相應的工廠類;③典型的解耦框架,在應用當中較為常見,高層模塊只需要知道產品的抽象類,無須關心其具體實現(xiàn)類,滿足迪米特法則、依賴倒置原則和里氏替換原則。3.2工廠方法模式工廠方法模式的缺點:①類的個數(shù)容易過多,增加了復雜度;②增加了系統(tǒng)的抽象性和理解的難度;3.2工廠方法模式工廠方法模式的結構與實現(xiàn)工廠方法模式由抽象工廠、具體工廠、抽象產品和具體產品等4個要素構成。①抽象工廠(AbstractFactory):提供了創(chuàng)建產品的接口,調用者通過它訪問具體工廠的工廠方法來創(chuàng)建產品;②具體工廠(SpecificFactory):主要是實現(xiàn)抽象工廠中的抽象方法,完成具體產品的創(chuàng)建;③抽象產品(AbstractProduct):定義了產品的規(guī)范,描述了產品的主要特性和功能;④具體產品(Product):實現(xiàn)了抽象產品角色所定義的接口,由具體工廠來創(chuàng)建,它同具體工廠之間一一對應。3.2工廠方法模式工廠方法模式的類結構圖3.2工廠方法模式在工廠方法模式中,具體生產哪種產品,一般是配置在XML文件中的,例如:Spring、SpringMVC、MyBatis等,代碼示例如下所示。<?xmlversion="1.0"encoding="UTF-8"?><config><className>SpecificFactory1</className></config>3.3抽象工廠模式抽象工廠模式就是要考慮多等級產品的生產,即一個工廠可以生產多個等級的產品,例如A電器廠既可以生產電視機還可以生產空調,這里稱之為一個產品族;同一個等級的產品又可以由不同的生產商來生產,例如:空調有A工廠生產的還有B工廠生產的,這里稱之為一個產品等級。33.3抽象工廠模式使用抽象工廠模式一般要滿足以下條件:(1)系統(tǒng)中有多個產品族,每個具體工廠創(chuàng)建同一族但屬于不同等級結構的產品。(2)系統(tǒng)一次只可能消費其中某一族產品,即同族的產品可以一起使用。33.3抽象工廠模式抽象工廠模式除了具有工廠方法模式的優(yōu)點外,還具有以下優(yōu)點:(1)可以在類的內部對產品族中相關聯(lián)的多等級產品共同管理,而不必專門引入多個新的類來進行管理。(2)當需要產品族時,抽象工廠可以保證客戶端始終只使用同一個產品的產品族。(3)抽象工廠增強了程序的可擴展性,當增加一個新的產品族時,不需要修改原代碼,更好滿足開閉原則。其缺點是:當產品族中需要增加一個新的產品時,所有的工廠類都需要進行修改。增加了系統(tǒng)的抽象性和理解難度。33.3抽象工廠模式抽象工廠模式的4個要素如下:①抽象工廠(AbstractFactory):提供了創(chuàng)建產品的接口,它包含多個創(chuàng)建產品的方法,可以創(chuàng)建多個不同等級的產品。②具體工廠(SpecificFactory):主要是實現(xiàn)抽象工廠中的多個抽象方法,完成具體產品的創(chuàng)建。③抽象產品(AbstractProduct):定義了產品的規(guī)范,描述了產品的主要特性和功能,抽象工廠模式有多個抽象產品。④具體產品(Product):實現(xiàn)了抽象產品接口所定義的方法,由具體工廠來創(chuàng)建,它同具體工廠之間是多對一的關系。33.3抽象工廠模式3抽象工廠模式的類結構圖3.3抽象工廠模式抽象工廠模式的實現(xiàn)①抽象工廠:提供了產品的生成方法,其主要代碼如下所示:interfaceAbstractFactory{publicAbstractProduct1getProduct1();publicAbstractProduct2getProduct2();}②具體工廠:實現(xiàn)了產品的生成方法,其主要代碼如下所示:classSpecificFactory1implementsAbstractFactory{publicProduct1getProduct1(){System.out.println("具體工廠1生成-->具體產品11...");returnnewProduct11();}publicProduct2getProduct2(){System.out.println("具體工廠2生成-->具體產品21...");returnnewProduct21();}}3課程思政工廠模式的思想來源于社會生產勞動的大分工,工廠是工業(yè)生產的基礎,通過工廠的工業(yè)化生產,極大地豐富了人們的物質生活,提供了勞動效率,促進了社會進步和科學技術發(fā)展。中國早已成為世界工廠,中國制造享譽全球,中國離不開世界,世界也離不開中國。近年來,隨著中國科技突飛猛進的發(fā)展,中國制造正在轉向中國智造,傳統(tǒng)的工廠正在轉變?yōu)橹悄芑S、無人化工廠,這將更好的推動工業(yè)化生產,也必將促進中國社會更好的發(fā)展,對于我國的軟件產業(yè)而言,這或許是一個難得的發(fā)展機遇。請大家堅定理想信念,相信隨著國產替代的不斷深入,卡脖子問題將逐步解決,我國的軟件產業(yè)一定會大有前途!3建造者模式1.建造者模式的特點建造者模式指將一個復雜對象的構造與它的表示相分離,使同樣的構建過程可以創(chuàng)建不同的表示,這樣的設計模式被稱為建造者模式。它是將一個復雜的對象分解為多個簡單的對象,然后一步一步構建而成。它將變與不變相分離,即產品的組成部分是不變的,但每一部分是可以靈活選擇的。4建造者模式建造者模式主要有以下3個方面的優(yōu)點:(1)封裝性好,構建和表示相分離;(2)擴展性好,各個具體的建造者相互獨立,有利于系統(tǒng)的解耦;(3)客戶端不必知道產品內部組成細節(jié),建造者可以對創(chuàng)建過程逐步細化,而不對其它模塊產生任何影響,便于控制細節(jié)風險。4建造者模式建造者模式也有以下2個方面的缺點:(1)產品的組成部分必須相同,這限制了其使用范圍。(2)如果產品的內部變化復雜,則建造者也要同步修改,后期維護成本較大。建造者模式和工廠模式的關注點不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結合使用。4建造者模式建造者模式由產品、抽象建造者、具體建造者、指揮者等4個要素構成。①產品(Product):它是包含多個組成部件的復雜對象,由具體建造者來創(chuàng)建其各個零部件。②抽象建造者(AbstractBuilder):它是一個包含創(chuàng)建產品各個子部件的抽象方法的接口,通常還包含一個返回復雜產品的方法。③具體建造者(ConcreteBuilder):實現(xiàn)Builder接口,完成復雜產品的各個部件的具體創(chuàng)建方法。④指揮者(Director):它調用建造者對象中的部件構造與裝配方法完成復雜對象的創(chuàng)建,在指揮者中不涉及具體產品的信息。4建造者模式4建造者模式的類結構圖建造者模式建造者模式主要適用于以下應用場景:(1)相同的方法,不同的執(zhí)行順序,產生不同的結果;(2)多個部件或零件,都可以裝配到一個對象中,但是產生的結果又不相同;(3)產品類非常復雜,或者產品類中不同的調用順序產生不同的作用;(4)初始化一個對象特別復雜,參數(shù)多,而且很多參數(shù)都具有默認值。4建造者模式建造者模式和工廠模式的區(qū)別(1)建造者模式更加注重方法的調用順序,工廠模式注重創(chuàng)建對象;(2)創(chuàng)建對象的力度不同,建造者模式創(chuàng)建復雜的對象,由各種復雜的部件組成,工廠模式創(chuàng)建出來的對象都一樣;(3)關注點不一樣,工廠模式只需要把對象創(chuàng)建出來就可以了,而建造者模式不僅要創(chuàng)建出對象,還要知道對象由哪些部件組成;(4)建造者模式根據(jù)建造過程中的順序不一樣,最終對象部件組成也不一樣。4代理模式
在日常生活中,能夠經常見到:租房中介、婚介、律師事務所等,這些都是代理模式的實際體現(xiàn)。代理模式的定義也非常簡單,是指為其它對象提供一種代理,幫助對象行使自己的權利,完成相應的功能,并且能夠控制對這個對象的訪問。
代理對象在調用者(客戶)和目標對象之間起到中介作用,代理模式屬于結構性設計模式。使用代理模式主要有兩個目的:一是保護目標對象,二是增強目標對象,代理模式的結構類圖如圖。5代理模式5代理模式的類圖結構代理模式代理模式主要包括3個要素組成:1.抽象主題(AbstractSubject)類:通過接口或抽象類聲明真實主題和代理對象實現(xiàn)的抽象方法。2.真實主題(RealSubject)類:實現(xiàn)了抽象主題中的抽象方法,是代理對象所代表的真實對象,是最終要引用的對象。3.代理(Proxy)類:提供了與真實主題相同的接口,其內部含有對真實主題的引用,它可以訪問、控制或擴展真實主題的功能。5代理模式根據(jù)代理的創(chuàng)建時間不同,代理模式分為靜態(tài)代理和動態(tài)代理。1.靜態(tài)代理:由程序員創(chuàng)建代理類或特定工具自動生成源代碼再對其編譯,在程序運行前代理類的字節(jié)碼文件(.class)就已經存在了;2.動態(tài)代理:在程序運行時,運用Java語言的反射機制動態(tài)創(chuàng)建而成。代理模式是面向切面編程的基礎,在SpringAOP編程中會結合代碼再重點講解靜態(tài)代理和動態(tài)代理的具體實現(xiàn)細節(jié)。5代理模式主要的應用場景包括以下5個方面:1.遠程代理2.虛擬代理3.安全代理4.智能指引5.延遲加載5代理模式代理模式主要具有以下3方面的優(yōu)點:1.職責清晰2.高擴展性3.解耦合5代理模式代理模式的簡單示例5packageproxy;publicclassProxyTest{//調用者(客戶)publicvoidtest(){Proxyproxy=newProxy();//生成代理對象proxy.request();//調用代理對象方法}}//抽象主題interfaceAbstractSubject{voidrequest();}//真實主題classRealSubjectimplementsAbstractSubject{publicvoidrequest(){System.out.println("訪問真實主題方法...");}}//代理classProxyimplementsAbstractSubject{//這里演示靜態(tài)代理,代理類也要實現(xiàn)抽象主題privateRealSubjectrealSubject;publicvoidrequest(){if(realSubject==null){//判斷是否存在目標對象,若不存在,則創(chuàng)建一個realSubject=newRealSubject();}beforeRequest();//調用代理對象方法realSubject.request();//調用目標對象方法afterRequest();//調用代理對象方法}publicvoidbeforeRequest(){//代理的增強System.out.println("訪問真實主題之前的預處理。");}publicvoidafterRequest(){//代理的增強System.out.println("訪問真實主題之后的后續(xù)處理。");}}MVC模式MVC全名是Model-View-Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,它是一種軟件設計典范,用業(yè)務邏輯、數(shù)據(jù)處理和界面顯示相分離的方法來組織和管理代碼,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。66.1MVC的由來MVC是在二十世紀八十年代為編程語言Smalltalk-80發(fā)明的一種軟件設計模式,最初的設計是應用于桌面程序開發(fā)的,M是指業(yè)務模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現(xiàn)代碼分離,進行代碼解耦,從而使同一個程序可以使用不同的表現(xiàn)形式,提高代碼的可復用性。比如一批統(tǒng)計數(shù)據(jù)可以分別用表格、圖形來表示,但是業(yè)務模型(M)不需要做出任何改變。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新,C起到指揮中心的作用。66.2MVC設計模式在JavaWeb開發(fā)中的應用1.JSP+JavaBean開發(fā)模式JSP+JavaBean中JSP用于處理用戶請求,JavaBean用于封裝和處理數(shù)據(jù)。該模式只有視圖和模型,一般把控制器的功能交給視圖來實現(xiàn),適合業(yè)務流程比較簡單的Web程序,如圖。6JSP+JavaBean開發(fā)模式6.2MVC設計模式在JavaWeb開發(fā)中的應用2.Servlet+JSP+JavaBean開發(fā)模式Servlet+JSP+JavaBean中Servlet用于處理用戶請求,JSP用于數(shù)據(jù)顯示,JavaBean用于數(shù)據(jù)封裝,適合復雜的Web程序,如圖。6Servlet+JSP+JavaBean開發(fā)模式6.3MVC的工作原理6在MVC設計中,Model(模型)是應用程序中用于處理應用程序數(shù)據(jù)邏輯的部分,通常模型對象負責在數(shù)據(jù)庫中存取數(shù)據(jù);View(視圖)是應用程序中處理數(shù)據(jù)顯示的部分,通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的;Controller(控制器)是應用程序中處理用戶交互的部分,通??刂破髫撠煆囊晥D讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。6.4MVC設計模式的優(yōu)點在MVC設計模式中,把一個完整的業(yè)務邏輯劃分3個部分,降低了相互之間的耦合性,遵守了單一職責原則,使項目具有較好的可維護性和擴展性,還具有以下的優(yōu)點:1.低耦合性2.高重用性3.較低的生命周期成本4.快速的部署5.可維護性6.有利于軟件工程化管理67習題1.簡述軟件設計模式對軟件工程發(fā)展的貢獻?2.工廠模式在許多項目當中都應廣泛的應用,請對比分析簡單工廠模式、工廠方法模式和抽象工廠模式之間的聯(lián)系與區(qū)別?3.試分析代理模式在應用當中主要存在哪些缺點?4.MVC設計模式具有廣泛的應用,你還知道哪些開源框架是MVC模式的?5.你還了解哪些經典的軟件設計模式,試分析它們的主要應用場景以及主要的優(yōu)缺點是什么?軟件架構設計實戰(zhàn)——基于SSM框架Software
Architecture
Design
Practice
Based
on
SSM
Framework第3章認識軟件架構123軟件架構概述感受身邊的架構存在軟件架構的表示4軟件架構的作用5常見的軟件架構模式6軟件架構與軟件框架軟件架構概述軟件架構描述的是一個系統(tǒng)應該怎么構建,是針對特定的軟件系統(tǒng)進行的一種抽象,能夠為大型軟件系統(tǒng)的設計、實現(xiàn)提供相應的指導,是相對而言比較具體的;而軟件體系結構是比較寬泛的,當然也是對軟件項目設計的整體描述,但是面對的抽象層次更高一些。1軟件架構概述隨著軟件規(guī)模的不斷擴大和軟件復雜性的不斷提高,使軟件系統(tǒng)架構的復雜性逐步攀升,直接導致了軟件實現(xiàn)、軟件維護、軟件服務、軟件項目管理等也越來越困難?,F(xiàn)代軟件工程的核心,正在軟件架構領域,以軟件架構和軟件構件為核心的軟件開發(fā)方法,使軟件生產走向工業(yè)化和自動化,極大的提高了軟件開發(fā)的生產效率。11.1軟件架構產生的背景隨著組件化軟件開發(fā)方式的發(fā)展,如何在設計階段對軟件系統(tǒng)進行抽象,獲取系統(tǒng)藍圖以支持系統(tǒng)開發(fā)中的決策成為迫切而現(xiàn)實的問題。主要包括以下3個方面:1.軟件復雜、易變,其行為特性難以預見,軟件開發(fā)過程中需求和設計之間缺乏有效的轉換,導致軟件開發(fā)過程困難和不可控。2.隨著軟件系統(tǒng)規(guī)模越來越大,整個系統(tǒng)的結構和規(guī)格說明顯得越來越重要。同時軟件的各個模塊之間有各種顯性或隱性的依賴關系,隨著系統(tǒng)的成長和模塊的增多,這些關系的數(shù)量往往以幾何級數(shù)的速度增長。3.對于大規(guī)模的復雜軟件系統(tǒng),相較于對計算算法和數(shù)據(jù)結構的選擇,總體的系統(tǒng)結構設計和規(guī)格說明已經變得更加重要了。1.1軟件架構產生的背景20世紀90年代,研究人員展開了關于軟件架構的基礎研究,主要集中于架構風格(模式)、架構描述語言、架構文檔和形式化方法等方面。軟件架構在高層次上對軟件進行描述,便于軟件開發(fā)過程中各個視角(如:用戶、業(yè)務和系統(tǒng))的統(tǒng)一,能夠及早發(fā)現(xiàn)開發(fā)中的問題并支持各種解決方案的評估和預測。1.1軟件架構產生的背景在軟件項目生命周期的各個階段都需要使用到軟件架構。在需求分析階段,需要使用軟件架構模式(風格)對軟件規(guī)約進行完善,支持從需求模型向架構模型轉換;在軟件設計階段,通過軟件架構借助形式化或多角度抽象描述,建立系統(tǒng)的架構模型、功能模型等,為進一步細化奠定基礎;在軟件項目的實現(xiàn)和維護階段,軟件架構能夠幫助實現(xiàn)和維護人員理解軟件項目的整體結構、功能劃分等,更好的實現(xiàn)項目功能,盡早的發(fā)現(xiàn)和修復問題。因此良好的軟件架構設計是軟件項目得以順利實現(xiàn)的重要保障。1.2軟件架構的定義軟件架構是由結構和功能各異、相互作用的構件集合,按照一定的結構方式構成的系統(tǒng)。它包含系統(tǒng)的基礎構成單元,它們之間的作用關系,在構成系統(tǒng)時它們的集成方法以及對集成約束的描述等。1.2軟件架構的定義從軟件系統(tǒng)的角度理解架構定義,可以看到:軟件架構是關于軟件系統(tǒng)如何被組織起來的定義,即軟件系統(tǒng)是由以下三個要素構成的。1.組成系統(tǒng)的結構元素或構件2.構件與構件之間的連接以及特定的連接關系3.系統(tǒng)集成的方法和約束1.2軟件架構的定義為了便于理解架構,不妨將軟件構架的定義濃縮為以下三個要素:(1)組成架構的元素:構件。(2)構件的相互聯(lián)系:連接。(3)構件之間的相互聯(lián)系關系:連接關系。架構是一個或多個結構(子架構、可不斷細分)的抽象,是由抽象的構件來表示的,構件之間相互具有聯(lián)系,相互之間的聯(lián)系具有某些行為特征(連接關系)。1.3軟件架構的應用軟件架構是軟件生命周期中的重要產物,它影響軟件開發(fā)的各個階段。需求階段設計階段實現(xiàn)階段維護階段1.4軟件架構的一般特性軟件架構能夠服務于軟件項目生命周期的全過程,主要具有以下5個方面的特性。1.注重可重用性2.利益相關者較多3.關注點分離4.質量驅動5.概念完整性感受身邊的架構存在在我們的身邊有很多架構的存在,我們也能時刻感受架構的作用,例如人體的骨骼結構,正是由于頸椎骨骼的存在才能支撐我們抬頭、搖頭;一條魚能夠在水中快速的游動,也借助的是全身骨骼的支撐;一所高校能夠維持正常的運行,也依賴的是學校的組織架構(結構)。22.1交通信號燈控制系統(tǒng)的架構構件(實體部分):電源、信號燈、電線、開關;構件的相互聯(lián)系(連接):連接電路使信號燈能夠點亮與熄滅;構件之間的關系(邏輯關系):亮燈的順序、時長以及循環(huán)等。2.2智能手機充電接口的架構主要的構件(實體部分)包括:電線、接口、智能手機、PC機(或其他設備);構件的相互聯(lián)系(連接):智能手機與PC機(這里以PC機為例)通過USB連接;構件之間的關系(邏輯關系):PC、智能手機支持USBType-C協(xié)議,并遵守該協(xié)議進行數(shù)據(jù)傳遞。軟件架構的表示軟件架構最主要的功能就是描述系統(tǒng)將如何實現(xiàn)指派給它的軟件功能,這個描述就是架構視圖。33.1軟件架構的描述手機應用的界面設計草圖架構視圖是對于從某一視角或某一點上看到的系統(tǒng)所做的簡化描述,它涵蓋了系統(tǒng)的某一特定方面,而省略了與此方面無關的實體。3.2基于UML軟件架構視圖軟件架構是軟件開發(fā)的基礎,也是產品迭代的紐帶,通過架構能夠理解軟件設計的思路和目標。UML架構視圖及其作用3.2基于UML軟件架構視圖1.邏輯視圖3.2基于UML軟件架構視圖2.開發(fā)視圖3.2基于UML軟件架構視圖3.進程視圖3.2基于UML軟件架構視圖4.物理視圖3.2基于UML軟件架構視圖5.場景視圖場景視圖,一般是用來描述需求的,從某種意義上來講,是最重要的需求抽象,該視圖是其他視圖的冗余,同時其他視圖也都要與場景視圖發(fā)生交互。軟件架構的作用軟件架構在軟件項目的開發(fā)過程中主要具有以下四個方面的作用。1.作為溝通媒介2.為系統(tǒng)的功能實現(xiàn)提供支撐和約束3.是軟件過程管理的基礎4.是軟件迭代開發(fā)的框架4常見的軟件架構模式架構模式是一個通用的解決方案,用于解決在給定上下文中的軟件體系結構中經常出現(xiàn)的問題。架構模式與軟件設計模式類似,但具有更廣泛的應用范圍。這里簡要介紹5種常用的軟件架構模式,請讀者注意體會與軟件設計模式的區(qū)別,并在后面框架篇中結合具體的Spring、SpringMVC、MyBatis框架進行深入理解。55.1分層模式分成模式是一種最為常見的架構模式,也稱為多層體系架構模式。它用來構造可以分解為子任務組的軟件系統(tǒng),每個子任務都處于一個特定的抽象級別。每個層都為上一層提供支撐服務,并依賴于下一層的服務。5.2客戶端-服務器模式客戶端-服務器(Client/Server,簡稱C/S)模式由兩部分組成:一個服務器和多個客戶端。服務器組件將為多個客戶端組件提供服務,客戶端從服務器請求服務,服務器為這些客戶端提供相關服務5.3瀏覽器-服務器模式瀏覽器-服務器模型(Brower-Server,簡稱B/S)是一種對C/S模型的演變和改進,在這種模型中,用戶界面完全通過WEB瀏覽器實現(xiàn),一部分事務邏輯由瀏覽器實現(xiàn),大部分事務邏輯在服務器中實現(xiàn),它是一種特殊的客戶端-服務器模型,這種模型的客戶端是某種瀏覽器,采用HTTP協(xié)議通信。5.4管道過濾器模式管道-過濾器模式是一種面向數(shù)據(jù)流的軟件架構,主要由管道和過濾器組成,過濾器為一個具體的處理模塊,接受輸入數(shù)據(jù)然后進行一定的處理,最后進行輸出;管道是傳輸數(shù)據(jù)的組件,用于將數(shù)據(jù)從一個過濾器的輸出接口傳送到下一個過濾器的輸入接口。5.5微服務模式微服務架構指的是將大型復雜系統(tǒng)按功能或者業(yè)務需求,垂直切分成更小的子系統(tǒng),這些子系統(tǒng)以獨立部署的子服務存在,它們之間通過輕量級的、跨語言的同步或者異步(消息)網絡調用進行通信。5.5微服務模式每個微服務僅關注于完成一個業(yè)務域的事情,微服務模式特點:1.系統(tǒng)是由多個服務構成;2.每個服務可以獨立部署;3.每個服務之間是松耦合的,服務內部是高內聚的。5.5微服務模式微服務模式的主要優(yōu)點為:1.使大型的復雜應用程序可以持續(xù)交付和持續(xù)部署。2.每個服務都相對較小并容易維護。3.服務可以獨立部署和獨立擴展,系統(tǒng)迭代容易。4.微服務架構可以實現(xiàn)團隊的自治,團隊協(xié)作容易,每個服務團隊可以獨立于其他團隊開發(fā)、部署和擴展。開發(fā)速度相對單體應用更快。5.每個微服務都可以有獨立的存儲和服務器,從而整個系統(tǒng)的吞吐能力更強。5.5微服務模式微服務模式的主要缺點為:1.運維成本過高,部署數(shù)量較多,需要協(xié)調更多的開發(fā)團隊;2.接口需要與多個微服務對接,因此需要兼容多版本;3.分布式系統(tǒng)帶來更高的復雜性,需要處理分布式事務,需要有更好的發(fā)布平臺和分布式跟蹤平臺等。軟件架構與軟件框架軟件框架要從兩個方面來理解:一方面它是一個框——指其約束,即在特定領域內使用該框架應該遵守的規(guī)則和規(guī)范;另一方面它是一個架——指其支撐性,即在特定領域內對系統(tǒng)功能實現(xiàn)的基礎性支撐。6軟件架構與軟件框架軟件架構是一個系統(tǒng)的草圖,軟件架構描述的對象是直接構成系統(tǒng)的抽象組件。各個組件之間的連接則明確和相對細致地描述組件之間的通訊。在實現(xiàn)階段,這些抽象組件被細化為實際的組件,比如具體某個類或者對象。在面向對象領域中,組件之間的連接通常用接口來實現(xiàn)??蚣芫褪强蓮陀玫拇a,而架構不是,它是關于軟件如何設計的策略。引入軟件架構之后,整個開發(fā)過程變成了“兩步走”,先做架構設計,再進行框架開發(fā),架構決策會體現(xiàn)在框架開發(fā)之中。6軟件架構與軟件框架框架和架構的出現(xiàn),都是為了解決軟件系統(tǒng)日益復雜所帶來的困難而采取“分而治之”策略,先大局后局部,就出現(xiàn)了架構,先通用后專用,就出現(xiàn)了框架。下圖就描述了軟件架構與軟件框架的關系,架構是抽象解決方案,關注大局而忽略細節(jié),而框架是通用半成品,關注于細節(jié),但是還必須根據(jù)具體需求進一步定制開發(fā)才能成為應用系統(tǒng)。6軟件架構與軟件框架在軟件架構與軟件框架的關系中,起點為特定領域的復雜軟件工程問題(一般指待開發(fā)的軟件系統(tǒng)),先進行抽象,提取軟件系統(tǒng)要解決主要問題,形成軟件架構,即軟件系統(tǒng)的抽象解決方案,在這里忽略軟件系統(tǒng)實現(xiàn)的細節(jié)問題;由于特定領域軟件系統(tǒng)的共性問題,可以抽取出其共性問題的解決方案,這里指軟件代碼,例如在WEB應用中都涉及到數(shù)據(jù)類型的轉換、數(shù)據(jù)校驗等,可以剝離軟件系統(tǒng)中的特定業(yè)務邏輯,形成具有較好通用性的軟件代碼,這就是軟件框架,基于框架的軟件開發(fā)可以減少后繼軟件開發(fā)的工作量;把軟件架構和軟件框架有效結合,能夠充分發(fā)揮兩者的優(yōu)勢,通過框架能夠更好的理解架構的設計意圖,通過架構能夠更好的理解框架的基礎支撐。6課程思政我國的根本政治制度是人民民主專政,是在中國共產黨的領導下,以工農聯(lián)盟為基礎,實行人民民主和人民專政的國家政權。我國最高國家權力機關是中華人民共和國全國人民代表大會,它的常設機關是全國人民代表大會常務委員會。我國的最高國家行政機關是中華人民共和國國務院,也是最高國家權利機關的執(zhí)行機關,下設外交部、國防部、教育部等組成部門。在我國這種總體架構的設計下,我們全面建成了小康社會,實現(xiàn)了民族進步和國家富強。在習近平新時代中國特色社會主義思想指導下,中國共產黨領導全國各族人民,邁上全面建設社會主義現(xiàn)代化國家新征程、向著第二個百年奮斗目標勝利進軍。7習題
1.根據(jù)本章的架構實例和軟件架構的定義,用自己的話描述一下什么是軟件架構。
2.查閱資料了解一下軟件架構的定義,比較一下它們之間的差別。
3.還有哪些常用的軟件架構模式,它們的優(yōu)缺點是什么。
4.試分析比較C/S架構和B/S架構各自的優(yōu)缺點。
5.試比較分析一下軟件設計模式、軟件架構模式的聯(lián)系與區(qū)別?;赟SM框架的軟件架構設計實戰(zhàn)Software
Architecture
Design
Practice
Based
on
SSM
Framework第4章Spring框架基礎123Java企業(yè)級開發(fā)概述Spring框架概述Spring開發(fā)環(huán)境搭建Java企業(yè)級開發(fā)概述企業(yè)級應用:一般指那些為商業(yè)組織、企業(yè)、政府機關等大型組織機構創(chuàng)建并部署的解決方案及應用特點:以信息的存儲、流轉、處理為核心。結構復雜,涉及的外部資源眾多、事務密集、數(shù)據(jù)量大、用戶數(shù)多,對安全性和穩(wěn)定性的要求較高。重點圍繞相對固定的業(yè)務工作流運轉,一般來說,大型組織機構的業(yè)務流程在短時間內不會出現(xiàn)巨大的變動,因此,企業(yè)級應用的需求變化多表現(xiàn)為漸進式。用戶群體相對固定,具備相關領域知識,技能素質較高。Java企業(yè)級開發(fā)概述Java企業(yè)級開發(fā):1998年,J2EE(Java
2企業(yè)版)推出2005年,J2EE更名為JavaEE2020年,JavaEE更名為JakartaEE最新版:2022年發(fā)布的Jakarta10,包含20多個子項目Spring框架概述一種輕量級Java企業(yè)級應用開發(fā)框架發(fā)展史提出者:Rod
Johnson<<J2EE
Design
And
Development>>(2002)<<J2EE
Development
Without
EJB>>(2004)
interface21interface21Spring
1.0
(2004)Spring框架概述優(yōu)勢:方便解耦,簡化開發(fā)。通過Spring提供的控制反轉功能,可以將各個對象的創(chuàng)建和屬性注入完全交給Spring管理,降低了系統(tǒng)模塊間的耦合程度,便于實現(xiàn)面向抽象編程,有利于構建出體系結構優(yōu)良的應用程序。面向切面編程支持。通過Spring提供的面向切面編程功能,使開發(fā)人員更能專注于業(yè)務邏輯,很多不容易用傳統(tǒng)面向對象思想實現(xiàn)的功能可以較容易地通過面向切面編程思想實現(xiàn)。比如,基于面向切面編程,Spring提供了聲明式事務支持,使開發(fā)人員從單調繁瑣的事務管理代碼中解脫出來,提高了開發(fā)效率和質量。功能豐富,一站式開發(fā)。除Spring自己實現(xiàn)的功能外,Spring還對很多當時比較晦澀難用的J2EEAPI進行了封裝,如JDBC、JavaMail、遠程調用等,使這些API的使用難度降低,通過這些方式,Spring提供了企業(yè)級開發(fā)可能涉及的多種技術,如數(shù)據(jù)訪問相關技術、Web相關技術、測試等等。Spring框架概述主要組成部分(Spring
Framework)Core
ContainerData
Access/IntegrationWebAOPTestSpring框架概述建立在Spring
Framework基礎上的其它項目Spring
BootSpring
DataSpring
CloudSpring
SecuritySpring
REST
DocsSpring
Web
ServicesSpring框架概述獲取Spring框架方式一:獲取源碼方式二:下載jar包https://repo.spring.io/ui/,左側選擇“Artifacts”,然后依次展開:libs-release-local、org、springframework、spring,找到需要的版本,點擊spring-x.x.x-dist.zip即可下載/spring-projects/方式三:自動構建工具Maven、GradleSpring開發(fā)環(huán)境搭建步驟:安裝JDK安裝IntelliJ
IDEA安裝和配置Maven創(chuàng)建Maven應用程序Spring開發(fā)環(huán)境搭建在Maven配置文件pom.xml的根標簽中添加<dependencies></dependencies>標簽,并在其中添加如下代碼:Spring開發(fā)環(huán)境搭建在項目的src/main/resources路徑下新建beans.xml文件,作為Spring的配置文件,內容如下:Spring開發(fā)環(huán)境搭建編寫測試代碼。在項目的src/main/java路徑下新建Main.java文件,輸入以下代碼:Q&A
Time基于SSM框架的軟件架構設計實戰(zhàn)Software
Architecture
Design
Practice
Based
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2《拉拉手交朋友》(第2課時)(教學設計)2024-2025學年統(tǒng)編版道德與法治一年級上冊
- 2025年度廚師培訓學校課程開發(fā)合同
- 2025年特色眼子針項目投資可行性研究分析報告
- 《過秦論》教學設計 2024-2025學年統(tǒng)編版高中語文選擇性必修中冊
- 中國即時通訊行業(yè)市場全景監(jiān)測及投資前景展望報告
- 中國黑板行業(yè)發(fā)展趨勢預測及投資戰(zhàn)略研究報告
- 中國3G視頻通話市場調查研究及行業(yè)投資潛力預測報告
- 2025年度鐵路貨運代理服務合同
- 2025年度大型設備吊裝運輸服務合同書范本
- 2025年度媒體數(shù)字資產管理與采購合同范本
- 2025年企業(yè)法務顧問聘用協(xié)議范本
- 《康復評定技術》課件-第五章 運動控制
- 【理特咨詢】2024生成式人工智能GenAI在生物醫(yī)藥大健康行業(yè)應用進展報告
- 2025新人教版英語七年級下單詞默寫表(小學部分)
- 2025年春新外研版(三起)英語三年級下冊課件 Unit6第1課時Startup
- 平拋運動的經典例題
- 錄井作業(yè)現(xiàn)場風險評估及控制措施
- 2025年度商會工作計劃
- 社區(qū)管理與服務專業(yè)實習總結范文
- 施工現(xiàn)場5S管理規(guī)范
- 【MOOC】中級財務會計-西南交通大學 中國大學慕課MOOC答案
評論
0/150
提交評論