版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο笤O(shè)計(jì)2023最新整理收集do
something7面向?qū)ο笤O(shè)計(jì)3設(shè)計(jì)模式DesignPattern面向?qū)ο笱芯康男骂I(lǐng)域20世紀(jì)90年代,面向?qū)ο蠓椒ㄅc技術(shù)在國(guó)內(nèi)軟件業(yè)界十分火爆,人們熱衷于談?wù)摗皩?duì)象”并引以為榮。十多年來(lái),人們發(fā)表、出版了無(wú)數(shù)的文章和書籍?,F(xiàn)在,該寫的似乎都寫完了,沒(méi)有新花樣玩了,真是一片無(wú)聊設(shè)計(jì)模式(DesignPattern)及時(shí)問(wèn)世,面向?qū)ο髳?ài)好者們終于有了新的追求7面向?qū)ο笤O(shè)計(jì)4設(shè)計(jì)模式:起源起源ChristopherAlexander當(dāng)代著名建筑大師加州大學(xué)伯克利分校建筑學(xué)教授、環(huán)境結(jié)構(gòu)研究所所長(zhǎng)、美國(guó)藝術(shù)與科學(xué)院院士在建筑、室內(nèi)、計(jì)算機(jī)、家具設(shè)計(jì)甚至哲學(xué)方面都卓有建樹(shù)著作:《APatternLanguage》、《TheTimelessWayofBuilding》7面向?qū)ο笤O(shè)計(jì)5設(shè)計(jì)模式:起源Gof(GangOfFour,“四人幫”)ErichGamma,RichardHelm,RalphJohnson,JohnVlissides1995年出版了《DesignPatterns:ElementsofReusableObject-OrientedSoftware》該書確立了設(shè)計(jì)模式這個(gè)術(shù)語(yǔ),創(chuàng)導(dǎo)了一種新的面向?qū)ο笤O(shè)計(jì)思潮。從此,參與設(shè)計(jì)模式研究的人數(shù)爆炸性地增長(zhǎng)7面向?qū)ο笤O(shè)計(jì)6Ralph,Erich,Richard,andJohn7面向?qū)ο笤O(shè)計(jì)7設(shè)計(jì)模式什么叫模式?“每一個(gè)模式描述了在我們周圍不斷重復(fù)發(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的核心。這樣,你就能一次又一次地使用該解決方案而不必重復(fù)勞動(dòng)”盡管軟件技術(shù)發(fā)展非常快,但是仍然有非常多的設(shè)計(jì)模式可以讓我們套用設(shè)計(jì)模式可以幫助人們簡(jiǎn)便地復(fù)用以前成功的設(shè)計(jì)方案,提高工作效率7面向?qū)ο笤O(shè)計(jì)8設(shè)計(jì)模式:研究現(xiàn)狀設(shè)計(jì)模式的研究現(xiàn)狀pattern與Java、C#pattern與組件技術(shù)(如CORBA)pattern與系統(tǒng)結(jié)構(gòu)pattern與泛型編程(genericprogramming)相結(jié)合其他(例如UML等)7面向?qū)ο笤O(shè)計(jì)9模式的分類(gof提出的23個(gè))創(chuàng)建型結(jié)構(gòu)型行為型類FactoryMethodAdapter(類)InterpreterTemplateMethod
對(duì)象AbstractFactoryBuilderPrototypeSingletonAdapter(對(duì)象)BridgeCompositeDecoratorFacadeFlyweightProxyChainofResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitor7面向?qū)ο笤O(shè)計(jì)10Bridge(橋梁)模式案例有一個(gè)叫做HuntBird的游戲,里面需要表示各種各樣的鳥類7面向?qū)ο笤O(shè)計(jì)11Bridge(橋梁)模式最初的設(shè)計(jì)7面向?qū)ο笤O(shè)計(jì)12Bridge(橋梁)模式需求變化:鳥類要會(huì)飛7面向?qū)ο笤O(shè)計(jì)13Bridge(橋梁)模式如果增加一種鳥類“企鵝”呢?7面向?qū)ο笤O(shè)計(jì)14Bridge(橋梁)模式改進(jìn)方法:對(duì)“飛”使用多態(tài)7面向?qū)ο笤O(shè)計(jì)15Bridge(橋梁)模式改進(jìn)方法:再次使用繼承7面向?qū)ο笤O(shè)計(jì)16Bridge(橋梁)模式如果增加“游泳”行為呢?7面向?qū)ο笤O(shè)計(jì)17Bridge(橋梁)模式繼承只會(huì)使得問(wèn)題越來(lái)越復(fù)雜繼承是面向?qū)ο蟮幕痉▽毎???OO=類+對(duì)象+繼承+消息通信設(shè)計(jì)原則1:組合優(yōu)先優(yōu)先使用組合,而不是繼承7面向?qū)ο笤O(shè)計(jì)18設(shè)計(jì)原則:組合優(yōu)先繼承復(fù)用的優(yōu)點(diǎn)可以很容易的修改或擴(kuò)展父類的實(shí)現(xiàn)7面向?qū)ο笤O(shè)計(jì)19設(shè)計(jì)原則:組合優(yōu)先繼承復(fù)用的缺點(diǎn)繼承破壞封裝,因?yàn)楦割惖膶?shí)現(xiàn)細(xì)節(jié)完全暴露給子類(白盒復(fù)用)父類的實(shí)現(xiàn)發(fā)生改變,則子類必受牽連繼承是靜態(tài)的,不能在運(yùn)行時(shí)發(fā)生改變,不靈活7面向?qū)ο笤O(shè)計(jì)20設(shè)計(jì)原則:組合優(yōu)先組合復(fù)用的優(yōu)點(diǎn)不破壞封裝,這種復(fù)用是黑盒復(fù)用,因?yàn)槌蓡T對(duì)象的內(nèi)部細(xì)節(jié)對(duì)新對(duì)象保密所需依賴少(只依賴接口)是動(dòng)態(tài)的,可以把成員對(duì)象動(dòng)態(tài)替換為另一個(gè)類型相同的對(duì)象組合復(fù)用的缺點(diǎn)對(duì)象數(shù)量會(huì)增加使用委托(delegation)會(huì)使得系統(tǒng)復(fù)雜7面向?qū)ο笤O(shè)計(jì)21設(shè)計(jì)原則:組合優(yōu)先組合優(yōu)先Favorcompositionoverinheritance當(dāng)需要應(yīng)對(duì)變化的時(shí)候,應(yīng)該首先使用組合的方式,而不是繼承因?yàn)榻M合更加靈活例1:汽車有很多種,小轎車、貨車、客車,有的車是客貨兩用,有的車水陸兩用7面向?qū)ο笤O(shè)計(jì)22設(shè)計(jì)原則:組合優(yōu)先如果使用繼承來(lái)描述:一旦增加新的汽車種類或用途,都需要大量改動(dòng)原有代碼7面向?qū)ο笤O(shè)計(jì)23設(shè)計(jì)原則:組合優(yōu)先使用“組合”思路考慮問(wèn)題“汽車”擁有某種或某些“用途”“汽車”和“用途”獨(dú)立變化,互不影響7面向?qū)ο笤O(shè)計(jì)24設(shè)計(jì)原則:組合優(yōu)先區(qū)分“Is-A”與“Has-A”有一個(gè)系統(tǒng)需要描述經(jīng)理、雇員和學(xué)生它們都是人,所以:7面向?qū)ο笤O(shè)計(jì)25設(shè)計(jì)原則:組合優(yōu)先問(wèn)題有些人既是經(jīng)理,又是學(xué)生,比如某位在讀MBA的老總7面向?qū)ο笤O(shè)計(jì)26設(shè)計(jì)原則:組合優(yōu)先換一個(gè)角度看問(wèn)題雇員、經(jīng)理、學(xué)生其實(shí)都是角色的一種人擁有角色7面向?qū)ο笤O(shè)計(jì)27Bridge(橋梁)模式是什么導(dǎo)致設(shè)計(jì)的不完美?變化,無(wú)法避免的、經(jīng)常的需求變化設(shè)計(jì)者的理想當(dāng)需求變化的時(shí)候,盡可能少的修改代碼就可以滿足新的需求設(shè)計(jì)原則2:封裝可變性發(fā)現(xiàn)代碼容易變化的部分,封裝之,使它和不容易變化的部分獨(dú)立開(kāi)來(lái)7面向?qū)ο笤O(shè)計(jì)28Bridge(橋梁)模式“發(fā)現(xiàn)變化點(diǎn)”7面向?qū)ο笤O(shè)計(jì)29Bridge(橋梁)模式“封裝變化點(diǎn)”變化點(diǎn)1:小鳥一家7面向?qū)ο笤O(shè)計(jì)30Bridge(橋梁)模式“封裝變化點(diǎn)”變化點(diǎn)2:鳥類的行為——飛7面向?qū)ο笤O(shè)計(jì)31Bridge(橋梁)模式“封裝變化點(diǎn)”變化點(diǎn)2:鳥類的行為——游泳7面向?qū)ο笤O(shè)計(jì)32Bridge(橋梁)模式“使變化點(diǎn)和不變點(diǎn)獨(dú)立開(kāi)來(lái)”在這個(gè)例子里其實(shí)是兩個(gè)變化點(diǎn)相獨(dú)立“鳥類”和“行為”什么關(guān)系?鳥類擁有行為鳥類行為的具體實(shí)現(xiàn),委托“行為”類來(lái)完成7面向?qū)ο笤O(shè)計(jì)33鳥兒擁有飛、游泳的行為7面向?qū)ο笤O(shè)計(jì)34Bridge(橋梁)模式使用橋梁模式的效果比如增加一種鳥類“鵝”,相應(yīng)的要增加一種游泳的行為“紅掌撥清波”只需要增加一個(gè)鳥類的子類“鵝”增加一個(gè)游泳的行為“紅掌撥清波”設(shè)置“鵝”的飛翔行為為“飛不起來(lái)”設(shè)置“鵝”的游泳行為為“紅掌撥清波”原有代碼不需要改動(dòng)!7面向?qū)ο笤O(shè)計(jì)35Bridge(橋梁)模式7面向?qū)ο笤O(shè)計(jì)36Bridge(橋梁)模式使用橋梁模式的效果當(dāng)需求改變的時(shí)候(增加動(dòng)物或行為),只需要簡(jiǎn)單添加幾個(gè)類對(duì)原有代碼不需要改動(dòng)保證了代碼的穩(wěn)定,提高了可維護(hù)性設(shè)計(jì)原則3:開(kāi)-閉原則在設(shè)計(jì)一個(gè)軟件的時(shí)候,應(yīng)當(dāng)使這個(gè)軟件可以在不被修改的前提下擴(kuò)展7面向?qū)ο笤O(shè)計(jì)37Bridge(橋梁)模式結(jié)構(gòu)7面向?qū)ο笤O(shè)計(jì)38Bridge(橋梁)模式意圖將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化適用性抽象和它的實(shí)現(xiàn)部分可以獨(dú)立變化類的抽象以及它的實(shí)現(xiàn)都可以通過(guò)生成子類的方法加以擴(kuò)充實(shí)現(xiàn)部分的修改不會(huì)對(duì)客戶產(chǎn)生影響......7面向?qū)ο笤O(shè)計(jì)39Bridge(橋梁)模式應(yīng)用舉例1:“小朋友畫畫”使用蠟筆需要大中小三種型號(hào)每種型號(hào)各有12種顏色共36支7面向?qū)ο笤O(shè)計(jì)40Bridge(橋梁)模式使用毛筆:大、中、小3支毛筆12種顏料7面向?qū)ο笤O(shè)計(jì)41Bridge(橋梁)模式蠟筆和毛筆的差別蠟筆:筆和顏色無(wú)法分離,因此需要36種蠟筆毛筆:筆和顏色可以獨(dú)立選擇,因此只有3+12=15個(gè)子類體現(xiàn)了Bridge模式將繼承關(guān)系轉(zhuǎn)換為組合關(guān)系,從而降低了系統(tǒng)間的耦合,減少了代碼冗余7面向?qū)ο笤O(shè)計(jì)42Bridge(橋梁)模式應(yīng)用舉例2有一個(gè)CAD軟件,可以畫多種圖形同時(shí)支持多套繪圖算法傳統(tǒng)的設(shè)計(jì)7面向?qū)ο笤O(shè)計(jì)43Bridge(橋梁)模式應(yīng)用Bridge模式7面向?qū)ο笤O(shè)計(jì)44Bridge(橋梁)模式分析圖形Shape是一個(gè)抽象概念,它可以有許多具體化(變化點(diǎn)1)圖形的顯示Drawing是圖形的實(shí)現(xiàn),它也可以有許多套算法(變化點(diǎn)2)Bridge模式使用組合代替繼承,避免了復(fù)雜的繼承體系,使得兩個(gè)變化點(diǎn)獨(dú)立變化,互不影響7面向?qū)ο笤O(shè)計(jì)45設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性“開(kāi)-閉”原則BertrandMeyer:“Softwareshouldbeopenforextension,butclosedformodification”在設(shè)計(jì)一個(gè)軟件的時(shí)候,應(yīng)當(dāng)使這個(gè)軟件可以在不被修改的前提下擴(kuò)展解釋已有模塊,尤其是最重要的抽象層模塊不能動(dòng):保證穩(wěn)定性和延續(xù)性可以擴(kuò)展新模塊:增加新行為,保證靈活性7面向?qū)ο笤O(shè)計(jì)46設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性BertrandMeyer對(duì)象技術(shù)大師法國(guó)工程院院士蘇黎世工學(xué)院計(jì)算機(jī)系教授發(fā)明了Eiffel語(yǔ)言和按契約設(shè)計(jì)(DesignbyContract)的思想早年參與了Z形式語(yǔ)言的設(shè)計(jì)名著《面向?qū)ο筌浖?gòu)造》7面向?qū)ο笤O(shè)計(jì)47設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性玉帝遵照“開(kāi)-閉”原則維護(hù)天庭秩序當(dāng)年孫悟空大鬧天空,向天庭發(fā)出挑戰(zhàn):“皇帝輪流做,明年到我家......只教他搬出去,將天宮讓與我!”太白金星給玉皇大帝 建議道:“降一道招安 圣旨,把他宣來(lái)上界... 與他籍名在箓... 一則不動(dòng)眾勞師, 二則收仙有道也?!?面向?qū)ο笤O(shè)計(jì)48設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性分析“不動(dòng)眾勞師”、不破壞天規(guī)就是“閉”收仙有道就是“開(kāi)”招安,就是玉帝的“開(kāi)-閉”原則:既讓孫悟空滿意,又不必更改天庭現(xiàn)有的秩序7面向?qū)ο笤O(shè)計(jì)49設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性分析現(xiàn)有的天庭秩序是系統(tǒng)的最高抽象層弼馬溫這個(gè)職位只是具體的實(shí)現(xiàn)層招安的關(guān)鍵就是不允許更改現(xiàn)有的天庭秩序,但是允許將妖猴納入到文武百官中,從而擴(kuò)展了這一秩序的具體實(shí)現(xiàn)7面向?qū)ο笤O(shè)計(jì)50設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性“封裝可變性原則”gof:“考慮你的設(shè)計(jì)中什么可能會(huì)發(fā)生變化......考慮你允許什么發(fā)生變化而不讓這一變化導(dǎo)致重新設(shè)計(jì)”Shalloway:“發(fā)現(xiàn)變化點(diǎn),并封裝之”一種可變性不應(yīng)散落在代碼的很多角落一種可變性不應(yīng)當(dāng)與另一種可變性混合在一起7面向?qū)ο笤O(shè)計(jì)51設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性設(shè)計(jì)模式對(duì)“開(kāi)-閉”原則的支持比如Bridge橋梁模式:將抽象部分和實(shí)現(xiàn)部分分別封裝,可以分別獨(dú)立變化7面向?qū)ο笤O(shè)計(jì)52設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性對(duì)“開(kāi)-閉”原則支持的不好的例子java.util.Calendarjava提供的描述歷法的抽象類描述公歷的子類我們希望再派生出一個(gè)子類,用于描述陰歷7面向?qū)ο笤O(shè)計(jì)53設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性問(wèn)題:Calendar只定義了適用于公歷的常量和方法publicfinalstaticintSUNDAY=1;publicfinalstaticintMONDAY=2;...publicfinalstaticintJANUARY=0;publicfinalstaticintFEBRUARY=1;...publicvoidsetFistDayOfWeek(intvalue);publicintgetFirstDayOfWeek();...7面向?qū)ο笤O(shè)計(jì)54設(shè)計(jì)原則:開(kāi)-閉原則、封裝可變性問(wèn)題英文的星期、月份名稱不符合中國(guó)陰歷的叫法陰歷以10天為一周,公歷和陰歷每月的天數(shù)也不同,所以Calendar關(guān)于星期、月份的算法不適合陰歷總之,Calendar無(wú)法容納中國(guó)陰歷,因此不支持“開(kāi)-閉”原則7面向?qū)ο笤O(shè)計(jì)55Strategy(策略)模式橋梁模式使得兩個(gè)變化點(diǎn)的獨(dú)立7面向?qū)ο笤O(shè)計(jì)56Strategy(策略)模式單獨(dú)看飛的行為的實(shí)現(xiàn)策略模式:封裝了一系列算法,使得它們可以相互替換效果:算法可以獨(dú)立變化7面向?qū)ο笤O(shè)計(jì)57Strategy(策略):定義所有支持的算法的公共接口ConcreteStrategy(具體策略):實(shí)現(xiàn)具體算法Context(上下文):用一個(gè)ConcreteStrategy對(duì)象來(lái)配置維護(hù)一個(gè)對(duì)Strategy對(duì)象的引用可定義一個(gè)接口來(lái)讓Strategy訪問(wèn)它的數(shù)據(jù)7面向?qū)ο笤O(shè)計(jì)58限制變化的影響范圍增加新功能,要做到只增加新代碼,而不改動(dòng)老代碼盡量用組合,而不是繼承階段小結(jié)設(shè)計(jì)原則組合優(yōu)先開(kāi)-閉原則封裝可變性7面向?qū)ο笤O(shè)計(jì)59階段小結(jié)策略模式使得算法可以獨(dú)立變化使用組合取代繼承,封裝了可變性,保證了“開(kāi)-閉”橋梁模式使得抽象和實(shí)現(xiàn)獨(dú)立變化避免了兩個(gè)變化點(diǎn)的耦合7面向?qū)ο笤O(shè)計(jì)60Adapter(適配器)模式例子1:“不合適的插座”你的電腦的插頭是三相的而墻上的插座只有兩相的插頭和插座的“接口”不匹配,怎么辦?7面向?qū)ο笤O(shè)計(jì)61Adapter(適配器)模式例子2:HuntBird游戲中,希望增加一種鳥類“鴨子”但是發(fā)現(xiàn)以前有一個(gè)系統(tǒng)中已經(jīng)有了“鴨子”類,希望重用老代碼7面向?qū)ο笤O(shè)計(jì)62Adapter(適配器)模式新老代碼接口不一致7面向?qū)ο笤O(shè)計(jì)63Adapter(適配器)模式疑問(wèn)把老代碼修改一下不就可以了么?如下:7面向?qū)ο笤O(shè)計(jì)64Adapter(適配器)模式否定首先,老代碼不一定允許修改比如可能根本沒(méi)有代碼,只有鏈接庫(kù)其次,修改代碼工作量可能很大容易出錯(cuò)還記得“開(kāi)-閉原則”么7面向?qū)ο笤O(shè)計(jì)65Adapter(適配器)模式應(yīng)用(對(duì)象)適配器模式實(shí)現(xiàn)接口轉(zhuǎn)換7面向?qū)ο笤O(shè)計(jì)66Adapter(適配器)模式客戶(鳥)被適配者(鴨子)適配器請(qǐng)求轉(zhuǎn)換后的請(qǐng)求理解1:接口轉(zhuǎn)換7面向?qū)ο笤O(shè)計(jì)67Adapter(適配器)模式叫呷呷叫7面向?qū)ο笤O(shè)計(jì)68Adapter(適配器)模式理解2:重新包裝,改變接口7面向?qū)ο笤O(shè)計(jì)69Adapter(適配器)模式類適配器7面向?qū)ο笤O(shè)計(jì)70Adapter(適配器)模式結(jié)構(gòu)對(duì)象Adapter7面向?qū)ο笤O(shè)計(jì)71Adapter(適配器)模式結(jié)構(gòu)類Adapter7面向?qū)ο笤O(shè)計(jì)72Adapter(適配器)模式意圖將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作7面向?qū)ο笤O(shè)計(jì)73Adapter(適配器)模式應(yīng)用舉例1我們打算編寫一個(gè)畫圖軟件其中畫圓形已經(jīng)有了一個(gè)現(xiàn)成的類但是接口不同,不能直接使用7面向?qū)ο笤O(shè)計(jì)74Adapter(適配器)模式使用對(duì)象Adapter7面向?qū)ο笤O(shè)計(jì)75Adapter(適配器)模式應(yīng)用舉例2缺省適配模式——“魯達(dá)剃度”凡是和尚都應(yīng)該如此:7面向?qū)ο笤O(shè)計(jì)76Adapter(適配器)模式但是魯智深并不是這樣魯智深::習(xí)武(){
拳打鎮(zhèn)關(guān)西();
大鬧五臺(tái)山();
倒拔垂楊柳();
火燒瓦官寺();}7面向?qū)ο笤O(shè)計(jì)77Adapter(適配器)模式所以當(dāng)初魯達(dá)剃度時(shí),眾僧說(shuō):“這個(gè)人形容丑惡,相貌兇頑,不可剃度”?7面向?qū)ο笤O(shè)計(jì)78Adapter(適配器)模式但是長(zhǎng)老卻說(shuō):“此人上應(yīng)天星,心地剛直。雖然時(shí)下兇頑,命中駁雜,久后卻得清靜。證過(guò)非凡,汝等皆不及他”7面向?qū)ο笤O(shè)計(jì)79Adapter(適配器)模式“天星”就是缺省適配器當(dāng)你不想/不能實(shí)現(xiàn)接口的所有方法時(shí)利用缺省適配器類,提供這些方法的缺省實(shí)現(xiàn)從這個(gè)類再派生出的子類就可以不去實(shí)現(xiàn)那些不想實(shí)現(xiàn)的方法了7面向?qū)ο笤O(shè)計(jì)80設(shè)計(jì)原則:里氏代換原則例子1:“圓是不是橢圓?”在幾何學(xué)里,圓是橢圓的一種特殊情況因此,把橢圓看作父類,把圓作為子類7面向?qū)ο笤O(shè)計(jì)81設(shè)計(jì)原則:里氏代換原則問(wèn)題橢圓有長(zhǎng)軸、短軸圓會(huì)完全繼承下來(lái)這些對(duì)于圓來(lái)說(shuō)毫無(wú)意義類似的:“正方形不是矩形”Circlecircle;circle.GetMajorAxis();7面向?qū)ο笤O(shè)計(jì)82設(shè)計(jì)原則:里氏代換原則例子2:“企鵝不是鳥的子類”凡是鳥都會(huì)飛但是企鵝不會(huì)7面向?qū)ο笤O(shè)計(jì)83設(shè)計(jì)原則:里氏代換原則例子3我們需要設(shè)計(jì)一個(gè)類FileName來(lái)描述文件名,而文件名不就是一個(gè)特殊的字符串么?所以我們?nèi)绱嗽O(shè)計(jì):7面向?qū)ο笤O(shè)計(jì)84設(shè)計(jì)原則:里氏代換原則問(wèn)題凡是字符串都支持相加操作,也就是說(shuō)兩個(gè)字符串相加,結(jié)果還是一個(gè)字符串可是兩個(gè)文件名相加,還是一個(gè)合法的文件名么?比如:“c:\a.txt”+“d:\b.txt”結(jié)果是:“c:\a.txtd:\b.txt”7面向?qū)ο笤O(shè)計(jì)85設(shè)計(jì)原則:里氏代換原則錯(cuò)在哪里?墨子論“取譬”“白馬,馬也;乘白馬,乘馬也。驪馬,馬也;乘驪馬,乘馬也。”解釋:白馬、驪馬(黑馬)都是馬,既然馬可以騎,那么白馬和驪馬肯定也可以騎7面向?qū)ο笤O(shè)計(jì)86設(shè)計(jì)原則:里氏代換原則LiskovSubstitutionPrinciple一個(gè)軟件如果使用的是一個(gè)父類的話,如果把該父類換成子類,它不能察覺(jué)出父類對(duì)象和子類對(duì)象的區(qū)別也就是凡是父類適用的地方子類也適用繼承只有滿足里氏代換原則才是合理的設(shè)計(jì)原則4:里氏代換原則凡是父類適用的地方子類應(yīng)當(dāng)也適用7面向?qū)ο笤O(shè)計(jì)87設(shè)計(jì)原則:里氏代換原則反過(guò)來(lái)的代換不成立子類適用的地方不要求父類一定能適用墨子又說(shuō)“娣,美人也,愛(ài)娣,非愛(ài)美人也......盜,人也,惡盜,非惡人也”妹妹是美女,哥哥喜歡妹妹,并不是因?yàn)橄矚g美女小偷是人,討厭小偷,并不討厭所有人7面向?qū)ο笤O(shè)計(jì)88設(shè)計(jì)原則:里氏代換原則Java語(yǔ)言對(duì)此類問(wèn)題的防范它的String類是final的,不能繼承正確的方法使用Adapter模式7面向?qū)ο笤O(shè)計(jì)89設(shè)計(jì)原則:里氏代換原則Java中的反例它的Stack類是從Vector類繼承下來(lái)的“棧不就是施加了訪問(wèn)限制的數(shù)組么?”所以“StackIs-AVector”7面向?qū)ο笤O(shè)計(jì)90設(shè)計(jì)原則:里氏代換原則用里氏代換原則來(lái)判斷凡是數(shù)組行得通的地方,換成棧也行得通么?Vector可以隨機(jī)訪問(wèn),可以任意修改里面的元素...這些都是Stack所不允許的因此Stack不能從Vector繼承下來(lái),它不能擁有Vector的接口7面向?qū)ο笤O(shè)計(jì)91設(shè)計(jì)原則:里氏代換原則看看C++STL是怎么辦的STL中的stack其實(shí)是一個(gè)Adaptertemplate<classT,classCont=deque<T>>classstack{public:
void
push(constvalue_type&x){c.push_back(x);}
void
pop(){c.pop_back(x);}protected:Contc;};7面向?qū)ο笤O(shè)計(jì)92FactoryMethod(工廠方法)模式例子:“去快餐廳吃飯”7面向?qū)ο笤O(shè)計(jì)93void
BuyFood(string
餐館,string食品){
if(餐館=="KFC"){
if(食品=="Chicken")hamburger=newKFCChickenHamburger;
else
if(food=="Fish")hamburger=newKFCFishHamburger;}
else
if(restaurant=="McDonald"){
if(food=="Chicken")hamburger=newMcDonaldChickenHamburger;
else
if(food=="Fish")hamburger=newMcDonaldFishHamburger;}}7面向?qū)ο笤O(shè)計(jì)94FactoryMethod(工廠方法)模式增加一種新的食物呢?7面向?qū)ο笤O(shè)計(jì)95void
BuyFood(string
餐館,string食品){
if(餐館=="KFC"){
if(食品=="Chicken")hamburger=new
KFCChickenHamburger;
else
if(food=="Fish")hamburger=new
KFCFishHamburger;}...FactoryMethod(工廠方法)模式傳統(tǒng)設(shè)計(jì)的缺點(diǎn)依賴具體7面向?qū)ο笤O(shè)計(jì)96FactoryMethod(工廠方法)模式“Abstractionshouldnotdependupondetails.Detailsshoulddependuponabstractions”設(shè)計(jì)原則5:依賴倒置原則抽象不應(yīng)當(dāng)依賴于細(xì)節(jié)細(xì)節(jié)應(yīng)當(dāng)依賴于抽象7面向?qū)ο笤O(shè)計(jì)97設(shè)計(jì)原則:依賴倒置原則為什么說(shuō)“倒置”傳統(tǒng)的設(shè)計(jì)是抽象層依賴具體層傳統(tǒng)的重用,側(cè)重于具體層次的模塊,比如算法、數(shù)據(jù)結(jié)構(gòu)、函數(shù)庫(kù)因此軟件的高層模塊依賴低層模塊傳統(tǒng)的依賴方向7面向?qū)ο笤O(shè)計(jì)98設(shè)計(jì)原則:依賴倒置原則高層依賴低層的問(wèn)題抽象層包含的是系統(tǒng)的業(yè)務(wù)邏輯和宏觀的、戰(zhàn)略性的決定,是必然性的體現(xiàn)具體層則含有與實(shí)現(xiàn)相關(guān)的算法和邏輯,以及戰(zhàn)術(shù)性的決定,帶有相當(dāng)大的偶然性選擇。具體層經(jīng)常有變動(dòng),難免出現(xiàn)錯(cuò)誤必然依賴偶然,穩(wěn)定依賴變動(dòng)?7面向?qū)ο笤O(shè)計(jì)99設(shè)計(jì)原則:依賴倒置原則依賴具體的缺點(diǎn)7面向?qū)ο笤O(shè)計(jì)100設(shè)計(jì)原則:依賴倒置原則依賴抽象抽象一般不會(huì)變動(dòng)這樣代碼不會(huì)受易變的具體層影響7面向?qū)ο笤O(shè)計(jì)101設(shè)計(jì)原則:針對(duì)接口編程如何做到“依賴倒置”?“Programtoaninterface,notanimplementation”設(shè)計(jì)原則6:針對(duì)接口編程要針對(duì)接口編程不要針對(duì)實(shí)現(xiàn)編程7面向?qū)ο笤O(shè)計(jì)102設(shè)計(jì)原則:針對(duì)接口編程“針對(duì)接口編程”的一些建議變量、參數(shù)、返回值等應(yīng)聲明為抽象類不要繼承非抽象類不要重載父類的非抽象方法當(dāng)然這些只是建議實(shí)際情況要權(quán)衡利弊7面向?qū)ο笤O(shè)計(jì)103FactoryMethod(工廠方法)模式“女媧摶土造人”《風(fēng)俗通》:“俗說(shuō)天開(kāi)地辟,未有人民。女媧摶黃土為人?!?面向?qū)ο笤O(shè)計(jì)104FactoryMethod(工廠方法)模式簡(jiǎn)單工廠:根據(jù)傳入的參數(shù),決定創(chuàng)建哪一個(gè)產(chǎn)品類對(duì)象Human*
NvWa::CreateHuman(stringname){
if(name
==“ZhangSan") returnnew
ZhangSan;
elseif(name
==“LiSi") returnnew
LiSi;
elseif(name==“WangErMaZi") returnnew
WangErMaZi;}7面向?qū)ο笤O(shè)計(jì)105FactoryMethod(工廠方法)模式簡(jiǎn)單工廠的優(yōu)缺點(diǎn)優(yōu)點(diǎn):實(shí)現(xiàn)了責(zé)任分割利用判斷邏輯,決定實(shí)例化哪一個(gè)產(chǎn)品類客戶端可以免除直接創(chuàng)建產(chǎn)品類對(duì)象的責(zé)任,僅僅使用該產(chǎn)品缺點(diǎn):沒(méi)有完全做到“開(kāi)-閉”一旦增加新的產(chǎn)品,需要修改工廠的代碼但是客戶代碼不需要修改“我不入地獄誰(shuí)入地獄”7面向?qū)ο笤O(shè)計(jì)106FactoryMethod(工廠方法)模式“女媧舉繩造人”“女媧摶土為人,劇務(wù),力不暇供,乃引繩于桓泥中,舉以為人。”7面向?qū)ο笤O(shè)計(jì)107FactoryMethod(工廠方法)模式簡(jiǎn)單工廠的問(wèn)題所有具體產(chǎn)品對(duì)象的創(chuàng)建都放在一個(gè)類中,一旦增加新的產(chǎn)品,當(dāng)然工廠類要被修改工廠方法:使用多態(tài)來(lái)應(yīng)對(duì)提供一個(gè)抽象工廠的接口具體工廠分別負(fù)責(zé)創(chuàng)建具體產(chǎn)品對(duì)象增加新的產(chǎn)品只需要相應(yīng)增加新的具體工廠類7面向?qū)ο笤O(shè)計(jì)108FactoryMethod(工廠方法)模式結(jié)構(gòu)7面向?qū)ο笤O(shè)計(jì)109FactoryMethod(工廠方法)模式意圖定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類使一個(gè)類的實(shí)例化延遲到其子類優(yōu)點(diǎn)封裝了創(chuàng)建具體對(duì)象的工作使得客戶代碼“針對(duì)接口編程”,保持對(duì)變化的“關(guān)閉”7面向?qū)ο笤O(shè)計(jì)110FactoryMethod(工廠方法)模式工廠方法應(yīng)用到“快餐店”問(wèn)題7面向?qū)ο笤O(shè)計(jì)111Fa?ade(門面)模式例1:傳統(tǒng)的醫(yī)院:病人需要直接跟各個(gè)部門打交道門診掛號(hào)劃價(jià)化驗(yàn)取藥7面向?qū)ο笤O(shè)計(jì)112Fa?ade(門面)模式人性化的醫(yī)院接待員代替病人進(jìn)行掛號(hào)、劃價(jià)等病人只需要和接待員打交道門診掛號(hào)劃價(jià)取藥接待員醫(yī)院的門面(Facade)7面向?qū)ο笤O(shè)計(jì)113Fa?ade(門面)模式例2:組建家庭影院7面向?qū)ο笤O(shè)計(jì)114Fa?ade(門面)模式欣賞一部電影的辛苦過(guò)程:拉上窗簾、調(diào)暗燈光拿出零食打開(kāi)電視機(jī)打開(kāi)功放打開(kāi)音響打開(kāi)DVD機(jī)找出DVD碟片把碟片放入DVD機(jī)開(kāi)始播放...7面向?qū)ο笤O(shè)計(jì)115Fa?ade(門面)模式家庭影院系統(tǒng):7面向?qū)ο笤O(shè)計(jì)116Fa?ade(門面)模式用OO語(yǔ)言描述看電影的辛苦過(guò)程curtain.close();lights.setlight(5);tv.on();dvd.on();dvd.insertdisk(disk);dvd.play();amplifier.on();amplifier.setvolumn(5);7面向?qū)ο笤O(shè)計(jì)117Fa?ade(門面)模式缺點(diǎn)客戶需要和大量的類打交道操作復(fù)雜有時(shí)候操作順序不能顛倒關(guān)閉整個(gè)系統(tǒng)是不是也是一樣的復(fù)雜如果家庭影院升級(jí)了呢?7面向?qū)ο笤O(shè)計(jì)118設(shè)計(jì)原則:迪米特法則老子論“圣人之治”使民無(wú)知:“是以圣人之治,虛其心,實(shí)其腹,弱其志,常使民無(wú)知無(wú)欲”老死不相往來(lái):“小國(guó)寡民...鄰國(guó)相望,雞犬之聲相聞,民至老死,不相往來(lái)”軟件設(shè)計(jì)師就是軟件系統(tǒng)的統(tǒng)治者應(yīng)當(dāng)使得軟件的不同對(duì)象彼此之間盡量“老死不相往來(lái)”,降低系統(tǒng)維護(hù)成本7面向?qū)ο笤O(shè)計(jì)119設(shè)計(jì)原則:迪米特法則LawofDemeter又叫做最少知識(shí)原則“只與你直接的朋友們通信”不要跟“陌生人”說(shuō)話也就是信息隱藏、封裝設(shè)計(jì)原則7:迪米特法則每個(gè)軟件單元對(duì)其它單元盡可能少了解而且僅限于那些與自己密切相關(guān)的單元7面向?qū)ο笤O(shè)計(jì)120Fa?ade(門面)模式用一個(gè)門面對(duì)象簡(jiǎn)化所有細(xì)節(jié)7面向?qū)ο笤O(shè)計(jì)121Fa?ade(門面)模式目的提供一個(gè)更簡(jiǎn)單的系統(tǒng)接口使得復(fù)雜系統(tǒng)和客戶代碼耦合松散但是并不屏蔽原有的復(fù)雜但是功能強(qiáng)大的接口,用戶可以在易用性和通用性之間選擇7面向?qū)ο笤O(shè)計(jì)122Fa?ade(門面)模式舉例1:保安系統(tǒng)7面向?qū)ο笤O(shè)計(jì)123Fa?ade(門面)模式使用門面模式7面向?qū)ο笤O(shè)計(jì)124Fa?ade(門面)模式舉例2:股票7面向?qū)ο笤O(shè)計(jì)125Fa?ade(門面)模式基金7面向?qū)ο笤O(shè)計(jì)126Fa?ade(門面)模式Fa?adeV.S.Adapter共同點(diǎn):改變接口不同點(diǎn):目的不同F(xiàn)a?ade目的在于簡(jiǎn)化接口Adapter目的在于適配接口,以便新老系統(tǒng)可以協(xié)同工作7面向?qū)ο笤O(shè)計(jì)127設(shè)計(jì)原則:迪米特法則門面模式對(duì)迪米特法則的體現(xiàn)門面模式創(chuàng)造出一個(gè)門面對(duì)象將客戶端所涉及的屬于內(nèi)部類的數(shù)量減到最少客戶只需要和一個(gè)門面對(duì)象打交道7面向?qū)ο笤O(shè)計(jì)128設(shè)計(jì)原則:迪米特法則迪米特法則在詳細(xì)設(shè)計(jì)中的體現(xiàn)盡量降低成員的訪問(wèn)權(quán)限public->protected->private限制局部變量的有效范圍變量要用到的時(shí)候才去聲明它代碼更好懂(一看就知道這個(gè)變量是什么類型)該變量不容易被其它代碼誤改for
(inti=0;i<n;i++)...7面向?qū)ο笤O(shè)計(jì)129設(shè)計(jì)原則:接口隔離原則角色的合理劃分一個(gè)接口應(yīng)當(dāng)簡(jiǎn)單的只代表一個(gè)角色接口污染過(guò)于臃腫的接口是對(duì)接口的污染不要把沒(méi)什么關(guān)系的接口合并在一起設(shè)計(jì)原則8:接口隔離原則一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)當(dāng)建立在最小的接口上7面向?qū)ο笤O(shè)計(jì)130設(shè)計(jì)原則:接口隔離原則例子:全文搜索引擎搜索處理搜索結(jié)果生成索引7面向?qū)ο笤O(shè)計(jì)131設(shè)計(jì)原則:接口隔離原則接口分割:7面向?qū)ο笤O(shè)計(jì)132設(shè)計(jì)原則:接口隔離原則接口隔離原則和迪米特法則的關(guān)系迪米特法則要求盡量限制通信的廣度和深度而對(duì)接口進(jìn)行分割,使其最小化,避免對(duì)客戶提供不需要的服務(wù),當(dāng)然是符合迪米特法則的也體現(xiàn)了高內(nèi)聚、低耦合7面向?qū)ο笤O(shè)計(jì)133Command(命令)模式給家庭影院配一個(gè)遙控器7面向?qū)ο笤O(shè)計(jì)134Command(命令)模式傳統(tǒng)的想法:7面向?qū)ο笤O(shè)計(jì)135Command(命令)模式用戶要求:按鈕可以自定義voidRemoteControl::Button1(){ tv->On();}7面向?qū)ο笤O(shè)計(jì)136Command(命令)模式例1:“魏延謀反”諸葛亮在臨死前給楊儀一個(gè)錦囊,密囑:“我死,魏延必反,...那時(shí)自有斬魏延之人也”。同時(shí)授馬岱以密計(jì),只待魏延喊叫時(shí),便出其不意斬之后人有詩(shī)曰:“諸葛先機(jī)識(shí)魏延,已知日后反西川。錦囊遺計(jì)人難料,卻見(jiàn)成功在馬前”視頻:“魏延謀反.rm”7面向?qū)ο笤O(shè)計(jì)137Command(命令)模式結(jié)構(gòu)7面向?qū)ο笤O(shè)計(jì)138Command(命令)模式分析錦囊是對(duì)命令的封裝諸葛亮是命令的設(shè)計(jì)者,他選擇魏延作為命令的接收者楊儀和馬岱是命令的調(diào)用者,他們依據(jù)實(shí)際情況決定何時(shí)調(diào)用、是否調(diào)用命令命令運(yùn)行的結(jié)果就是使得命令的接收者魏延中計(jì),并按照預(yù)謀落入陷阱7面向?qū)ο笤O(shè)計(jì)139Command(命令)模式分析戰(zhàn)場(chǎng)瞬息萬(wàn)變,孔明不能處處臨場(chǎng)指揮在這個(gè)故事里,命令模式把命令的設(shè)計(jì)者諸葛亮、調(diào)用者楊儀、馬岱和執(zhí)行者魏延完全分割開(kāi),互相可以靈活變化命令由諸葛亮設(shè)計(jì)并封裝,交由楊儀、馬岱等待時(shí)機(jī)成熟時(shí)調(diào)用,調(diào)用結(jié)果就是命令的接收者魏延中計(jì)7面向?qū)ο笤O(shè)計(jì)140漢堡可樂(lè)薯?xiàng)l點(diǎn)菜單顧客知道自己想要什么,并填寫菜單服務(wù)員接過(guò)菜單交給廚師廚師根據(jù)菜單上的要求把飯菜做好例2:餐廳的工作流程菜單記錄了顧客的要求7面向?qū)ο笤O(shè)計(jì)141Command(命令)模式結(jié)構(gòu)7面向?qū)ο笤O(shè)計(jì)142Command(命令)模式人物關(guān)系顧客(Client):決定要點(diǎn)什么菜點(diǎn)菜單(Command):封裝了顧客的要求服務(wù)員(Invoker):決定如何、何時(shí)將菜單送達(dá)廚師(Receiver):顧客要求的接收者,是唯一知道如何做菜的7面向?qū)ο笤O(shè)計(jì)143Command(命令)模式運(yùn)作過(guò)程:7面向?qū)ο笤O(shè)計(jì)144命令(Command):聲明執(zhí)行操作的接口具體命令(ConcreteCommand):將一個(gè)接收者對(duì)象綁定于一個(gè)動(dòng)作;調(diào)用接收者相應(yīng)的操作,以實(shí)現(xiàn)Execute()客戶(Client):創(chuàng)建具體命令對(duì)象并設(shè)定它的接收者調(diào)用者(Invoker):要求該命令執(zhí)行這個(gè)請(qǐng)求接收者(Receiver):知道如何實(shí)施與執(zhí)行一個(gè)請(qǐng)求相關(guān)的操作,任何類都可以作為一個(gè)接收者7面向?qū)ο笤O(shè)計(jì)145Command(命令)模式效果可以很方便的增加新的命令將調(diào)用操作的對(duì)象(Invoker)與知道如何實(shí)現(xiàn)該操作的對(duì)象(Receiver)解耦將命令裝配成對(duì)象,容易實(shí)現(xiàn)Undo/Redo和日志功能可以實(shí)現(xiàn)事務(wù)管理:把多個(gè)命令合成為一個(gè),相當(dāng)于宏命令7面向?qū)ο笤O(shè)計(jì)146Command(命令)模式命令模式應(yīng)用在遙控器上:7面向?qū)ο笤O(shè)計(jì)147Command(命令)模式效果命令的調(diào)用者遙控器和執(zhí)行者電視機(jī)等設(shè)備完全解耦用戶可以動(dòng)態(tài)設(shè)置遙控器按鈕的功能這一切都不需要修改遙控器代碼做到了松散耦合,遵循了“開(kāi)-閉”原則7面向?qū)ο笤O(shè)計(jì)148Command(命令)模式應(yīng)用舉例1:“劉備東吳招親”周瑜與孫權(quán)定下計(jì)謀,以孫權(quán)之妹為誘餌,騙劉備到東吳招親,想趁機(jī)殺害劉備,索回荊州諸葛亮早識(shí)破了詭計(jì),令趙云護(hù)衛(wèi)劉備前往,并給他三個(gè)錦囊,囑咐他依次執(zhí)行。結(jié)果,趙云按照諸葛亮的錦囊妙計(jì)行事,不僅幫助劉備將孫權(quán)之妹孫尚香夫人迎娶回來(lái),還得到孫權(quán)之母吳國(guó)太的歡心,陪同劉備夫婦回了荊州《三國(guó)演義》這段記敘,為后世創(chuàng)造了“錦囊妙計(jì)”和“賠了夫人又折兵”兩個(gè)成語(yǔ)視頻:錦囊妙計(jì).rm7面向?qū)ο笤O(shè)計(jì)149Command(命令)模式結(jié)構(gòu):7面向?qū)ο笤O(shè)計(jì)150Command(命令)模式分析錦囊是對(duì)命令的封裝諸葛亮是命令的設(shè)計(jì)者,他選擇趙云為接收者趙云同時(shí)又是命令的調(diào)用者,他依據(jù)實(shí)際情況決定何時(shí)調(diào)用、是否調(diào)用命令趙云作為命令的接收者,具體執(zhí)行這個(gè)命令在這個(gè)故事里,命令模式把命令的設(shè)計(jì)者諸葛亮、調(diào)用者趙云和執(zhí)行者趙云完全分割開(kāi)。命令由諸葛亮設(shè)計(jì)并封裝,交由趙云調(diào)用,時(shí)機(jī)成熟時(shí),趙云調(diào)用命令,再由自己去執(zhí)行之7面向?qū)ο笤O(shè)計(jì)151Command(命令)模式應(yīng)用舉例2:“玉帝傳美猴王上天”玉帝命令太白金星召美猴王上天:“金星徑入當(dāng)中,面南立定道:‘我是西方太白金星,奉玉帝招安圣旨,下界請(qǐng)你上天,拜受仙錄?!庇竦鄣倪@一道命令就是要求猴王到上界報(bào)到。玉帝只管發(fā)出命令,而不管命令是怎樣傳達(dá)到美猴王的。太白金星負(fù)責(zé)將圣旨傳到,可是美猴王怎么執(zhí)行圣旨、何時(shí)執(zhí)行圣旨是美猴王自己的事。果不然,不久美猴王就大鬧了天宮7面向?qū)ο笤O(shè)計(jì)152Command(命令)模式結(jié)構(gòu)7面向?qū)ο笤O(shè)計(jì)153Command(命令)模式應(yīng)用舉例3:圖形界面7面向?qū)ο笤O(shè)計(jì)154好萊塢法則“Don’tcallus,we’llcallyou”本來(lái)是好萊塢的制片人拒絕演員時(shí)說(shuō)的,意思是“別煩我,我想要你的時(shí)候會(huì)去找你的”(其實(shí)永遠(yuǎn)不會(huì))這里是雙關(guān),指的是“調(diào)用”7面向?qū)ο笤O(shè)計(jì)155好萊塢法則回調(diào)(Callback)在框架中,框架知道何時(shí)去干一些事情,但不知道具體干什么客戶代碼知道干什么,但不知道何時(shí)去干這時(shí)候,客戶代碼傳給一個(gè)函數(shù)指針或者對(duì)象,由框架來(lái)決定何時(shí)調(diào)用7面向?qū)ο笤O(shè)計(jì)156好萊塢法則classButton{public: Button():action(0){}
voidsetAction(void(*act)()){ action=act;}
voidonClick(){(*action)();}private:
void(*action)();};7面向?qū)ο笤O(shè)計(jì)157TemplateMethod模板方法意圖定義一個(gè)操作中的算法的框架,而將一些步驟延遲到子類中。子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟7面向?qū)ο?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 連接坐課程設(shè)計(jì)
- 解決現(xiàn)實(shí)問(wèn)題的課程設(shè)計(jì)
- 2025年上半年小學(xué)學(xué)期教育教學(xué)工作總結(jié)(二篇)
- 2025年一公升的眼淚觀影心得范文(2篇)
- 選礦廠設(shè)備檢修驗(yàn)收制度(4篇)
- 2025年10月體育教師工作總結(jié)參考(二篇)
- 商業(yè)教育中的創(chuàng)新素質(zhì)培養(yǎng)課程設(shè)計(jì)
- 2025年10月幼兒園大班教師工作總結(jié)模版(四篇)
- 教育教學(xué)質(zhì)量提升方案(2篇)
- 2025年2月學(xué)校衛(wèi)生工作總結(jié)標(biāo)準(zhǔn)范文(二篇)
- 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024中國(guó)華電集團(tuán)限公司校園招聘高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年國(guó)家公務(wù)員考試行測(cè)真題及答案(完整版)
- 污水處理設(shè)施設(shè)備升級(jí)改造項(xiàng)目資金申請(qǐng)報(bào)告-超長(zhǎng)期特別國(guó)債投資專項(xiàng)
- 五年級(jí)上冊(cè)小數(shù)乘除豎式計(jì)算題200道及答案
- 2024年?yáng)|南亞工業(yè)氣瓶市場(chǎng)深度研究及預(yù)測(cè)報(bào)告
- 棉花良種選育與遺傳育種
- SH/T 3078-2024 立式圓筒形料倉(cāng)工程設(shè)計(jì)規(guī)范(正式版)
- 快遞驛站承包協(xié)議書
- 基于視覺(jué)果蔬識(shí)別的稱重系統(tǒng)設(shè)計(jì)
- 體育初中學(xué)生學(xué)情分析總結(jié)報(bào)告
評(píng)論
0/150
提交評(píng)論