




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、軟件設計模式1學習面向對象設計中前人最有價值的經驗總結-設計模式。以便重用優(yōu)秀、簡單的、經過驗證的問題解決方案。設計模式實際上討論的是在解決面向對象設計的某類問題時,應該設計那些類,這些類之間應該如何通信。設計模式使人們可以更加簡單方便地復用成功的設計和體系結構。將已證實的技術表述成設計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設計思路。設計模式幫助你做出有利于系統(tǒng)復用的選擇,避免設計損害了系統(tǒng)復用性。通過提供一個顯式類和對象作用關系以及它們之間潛在聯(lián)系的說明規(guī)范,設計模式甚至能夠提高已有系統(tǒng)的文檔管理和系統(tǒng)維護的有效性。簡而言之,設計模式可以幫助設計者更快更好地完成系統(tǒng)設計。學習設計模式的重要性課
2、程目的2參考書目(美) GoF, 設計模式-可服用的面向對象軟件的基礎,機械工業(yè)出版社,2005 (美)Elisabeth Freeman,Eric Freeman,Bert Bates,Kathy Sierra ,深入淺出設計模式(英文影印版),東南大學出版社,2005(美)Alan Shalloway,James R.Trott,設計模式精解,清華大學出版社,2004潔城 浩,設計模式-JAVA語言中的應用,中國鐵道出版社2005.1(板橋里人) 3第一章 引言主要內容什么是設計模式設計模式的描述設計模是怎樣解決設計問題怎樣選擇設計模式怎樣使用設計模式4什么是設計模式著名建筑師Christ
3、opher Alexander 說過:“每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復勞動”他的思想也同樣適用于面向對象設計模式,只是在面向對象的解決方案里,我們用對象和接口代替了墻壁和門窗。兩類模式的核心都在于提供了相關問題的解決方案。設計模式并不是一種具體技術,它講述的是思想,它不僅僅展示了接口或抽象類在實際案例中的靈活應用和智慧,讓你能夠真正掌握接口或抽象類的應用,從而 在原來的Java語言基礎上躍進一步,更重要的是,GoF的設計模式反復向你強調一個宗旨:要讓你的程序盡可能的可重用。 5設計模式內行的設計者知道
4、:不是解決任何問題都要從頭做起。他們更愿意復用以前使用過的解決方案。當找到一個好的解決方案,他們會一遍又一遍地使用。這些經驗是他們成為內行的部分原因。因此,你會在許多面向對象系統(tǒng)中看到類和相互通信的對象( c o m m u n i c a t i n go b j e c t)的重復模式。這些模式解決特定的設計問題,使面向對象設計更靈活、優(yōu)雅,最終復用性更好。它們幫助設計者將新的設計建立在以往工作的基礎上,復用以往成功的設計方案。一個熟悉這些模式的設計者不需要再去發(fā)現(xiàn)它們,而能夠立即將它們應用于設計問題中。6設計模式設計模式是人們對成功的,可供重復使用的設計經驗的總結。學習設計模式使人們可以
5、更加簡單方便地復用成功的設計和體系結構。將已證實的技術表述成設計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設計思路。設計模式幫助你做出有利于系統(tǒng)復用的選擇,避免設計損害了系統(tǒng)復用性。通過提供一個顯式類和對象作用關系以及它們之間潛在聯(lián)系的說明規(guī)范,設計模式甚至能夠提高已有系統(tǒng)的文檔管理和系統(tǒng)維護的有效性。簡而言之,設計模式可以幫助設計者更快更好地完成系統(tǒng)設計。7設計模式的定義一個設計模式命名、抽象和確定了一個通用設計結構的主要方面,這些設計結構能被用來構造可復用的面向對象設計。設計模式確定了所包含的類和實例,它們的角色、協(xié)作方式以及職責分配。每一個設計模式都集中于一個特定的面向對象設計問題或設計要點,
6、描述了什么時候使用它,在另一些設計約束條件下是否還能使用,以及使用的效果和如何取舍。8模式的四個要素模式名稱(pattern name) 一個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。問題(problem) 描述了應該在何時使用模式。它解釋了設計問題和問題存在的前因后果,它可能描述了特定的設計問題,如怎樣用對象表示算法等。也可能描述了導致不靈活設計的類或對象結構。有時候,問題部分會包括使用模式必須滿足的一系列先決條件。解決方案(solution) 描述了設計的組成成分,它們之間的相互關系及各自的職責和協(xié)作方式。因為模式就像一個模板,可應用于多種不同場合,所以解決方案并不描述一個特定
7、而具體的設計或實現(xiàn),而是提供設計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或對象組合)來解決這個問題。效果(consequences) 描述了模式應用的效果及使用模式應權衡的問題。9描述設計模式用統(tǒng)一的格式描述設計模式,對一個模式的描述包括以下部分:模式名和分類意圖:設計模式是做什么的?它的基本原理和意圖是什么?它解決的是什么樣的特定設計問題?動機:用以說明一個設計問題以及如何用模式中的類、對象來解決該問題的特定情景。該情景會幫助你理解隨后對模式更抽象的描述。適用性:什么情況下可以使用該設計模式?該模式可用來改進哪些不良設計?你怎樣識別這些情況?結構:采用基于對象建模技術對模式中的類
8、進行圖形描述。使用了交互圖來說明對象之間的請求序列和協(xié)作關系。10描述設計模式(續(xù))參與者:指設計模式中的類和/或對象以及它們各自的職責。協(xié)作:模式的參與者怎樣協(xié)作以實現(xiàn)它們的職責。效果:模式怎樣支持它的目標?使用模式的效果和所需做的權衡取舍?系統(tǒng)結構的哪些方面可以獨立改變?實現(xiàn):實現(xiàn)模式時需要知道的一些提示、技術要點及應避免的缺陷,以及是否存在某些特定于實現(xiàn)語言的問題。代碼示例:用來說明怎樣用Java實現(xiàn)該模式的代碼片段。已知應用:實際系統(tǒng)中發(fā)現(xiàn)的模式的例子。相關模式:與這個模式緊密相關的模式有哪些?其間重要的不同之處是什么?這個模式應與哪些其他模式一起使用?11設計模式的編目Abstrac
9、t Factory( 3 . 1 ):提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。A d a p t er ( 4 . 1 ):將一個類的接口轉換成客戶希望的另外一個接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。B r i d g e( 4 . 2 ):將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。B u i l d e r( 3 . 2 ):將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。Chain of Responsibility( 5 . 1 ):為解除請求的發(fā)送者和接收者之間耦合
10、,而使多個對象都有機會處理這個請求。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它。12GoF(Gang of Four)Erich GammaRichard HelmRalph JohnsonJohn Vlissides1994合著 Design Patterns Elements of Reusable Object-Oriented Software13設計模式的編目C o m m a n d( 5 . 2 ):將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可取消的操作。C o m p o s i t e( 4 .
11、 3 ):將對象組合成樹形結構以表示“部分-整體”的層次結構。C o m p o s i t e使得客戶對單個對象和復合對象的使用具有一致性。D e c o r a t o r( 4 . 4 ):動態(tài)地給一個對象添加一些額外的職責。就擴展功能而言, D e c o r a t o r模式比生成子類方式更為靈活。F a c a d e( 4 . 5 ):為子系統(tǒng)中的一組接口提供一個一致的界面, F a c a d e模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。14設計模式的編目Factory Method( 3 . 3 ):定義一個用于創(chuàng)建對象的接口,讓子類決定將哪一個類實例化。
12、Factory Method使一個類的實例化延遲到其子類。F l y w e i g h t( 4 . 6 ):運用共享技術有效地支持大量細粒度的對象。I n t e r p r e t e r( 5 . 3 ):給定一個語言, 定義它的文法的一種表示,并定義一個解釋器, 該解釋器使用該表示來解釋語言中的句子。I t e r a t o r( 5 . 4 ):提供一種方法順序訪問一個聚合對象中各個元素, 而又不需暴露該對象的內部表示。15設計模式的編目M e d i a t o r( 5 . 5 ):用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而
13、且可以獨立地改變它們之間的交互。M e m e n t o( 5 . 6 ):在不破壞封裝性的前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復到保存的狀態(tài)。O b s e r v e r( 5 . 7 ):定義對象間的一種一對多的依賴關系,以便當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動刷新。P r o t o t y p e( 3 . 4 ):用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這個原型來創(chuàng)建新的對象。16設計模式的編目P r o x y( 4 . 7 ):為其他對象提供一個代理以控制對這個對象的訪問。S i n g l e t o
14、 n( 3 . 5 ):保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。S t a t e( 5 . 8 ):允許一個對象在其內部狀態(tài)改變時改變它的行為。對象看起來似乎修改了它所屬的類。S t r a t e g y (5 . 9 ):定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換。本模式使得算法的變化可獨立于使用它的客戶。Template Method( 5 . 1 0 ):定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。Vi s i t o r( 5 . 11 ):表示
15、一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。17設計模式分類根據(jù)模式目的來分。即模式是用來完成什么工作的。模式依據(jù)其目的可分為創(chuàng)建型( C r e a t i o n a l )、結構型( S t r u c t u r a l )、或行為型( B e h a v i o r a l )三種。創(chuàng)建型模式與對象的創(chuàng)建有關;結構型模式處理類或對象的組合;行為型模式對類或對象怎樣交互和怎樣分配職責進行描述。根據(jù)模式的范圍分,指定模式主要是用于類還是用于對象。類模式處理類和子類之間的關系,這些關系通過繼承建立,是靜態(tài)的,在編譯時刻便確定下來了。
16、對象模式處理對象間的關系,這些關系在運行時刻是可以變化的,更具動態(tài)性。從某種意義上來說,幾乎所有模式都使用繼承機制,所以“類模式”只指那些集中于處理類間關系的模式,而大部分模式都屬于對象模式的范疇。18模式分類表19模式之間的關系還有一種方式是根據(jù)模式的“相關模式”部分所描述的它們怎樣互相引用來組織設計模式。圖1 - 1給出了模式關系的圖形說明。20設計模式怎樣解決設計問題設計模式采用多種方法解決面向對象設計者經常碰到的問題。這里給出幾個問題以及使用設計模式解決它們的方法。尋找合適的對象決定對象的粒度指定對象接口描述對象的實現(xiàn)運用復用機制關聯(lián)運行時刻和編譯時刻的結構設計應支持變化21設計模式幫
17、助尋找合適的對象面向對象設計最困難的部分是將系統(tǒng)分解成對象集合。因為要考慮許多因素:封裝、粒度、依賴關系、靈活性、性能、演化、復用等等,它們都影響著系統(tǒng)的分解,并且這些因素通常還是互相沖突的。設計的許多對象來源于現(xiàn)實世界的分析模型。但是,設計結果所得到的類通常在現(xiàn)實世界中并不存在。嚴格反映當前現(xiàn)實世界的模型并不能產生也能反映將來世界的系統(tǒng)。設計中的抽象對于產生靈活的設計是至關重要的。設計模式可以幫助確定并不明顯的抽象和描述這些抽象的對象。例如,描述過程或算法的對象現(xiàn)實中并不存在,但它們卻是設計的關鍵部分。S t r a t e g y 模式描述了怎樣實現(xiàn)可互換的算法族。S t a t e 模式
18、將實體的每一個狀態(tài)描述為一個對象。這些對象在分析階段,甚至在設計階段的早期都并不存在,后來為使設計更靈活、復用性更好才將它們發(fā)掘出來。22設計模式幫助決定對象的粒度對象在大小和數(shù)目上變化極大。它們能表示下自硬件或上自整個應用的任何事物。那么我們怎樣決定一個對象應該是什么呢?設計模式很好地講述了這個問題。F a c a d e 模式描述了怎樣用對象表示完整的子系統(tǒng),F(xiàn) l y w e i g h t 模式描述了如何支持大量的最小粒度的對象。其他一些設計模式描述了將一個對象分解成許多小對象的特定方法。Abstract Factory和B u i l d e r 產生那些專門負責生成其他對象的對象。
19、Vi s i t o r 和C o m m a n d 生成的對象專門負責實現(xiàn)對其他對象或對象組的請求。23對象接口一個操作對應的操作名、作為參數(shù)的對象和返回值,這就是所謂的操作的型構( s i g n a t u r e )。一個對象所定義的所有操作型構的集合被稱為該對象的接口( i n t e r f a c e )。在面向對象系統(tǒng)中,接口是基本的組成部分。對象只有通過它們的接口才能與外部交流,如果不通過對象的接口就無法知道對象的任何事情,也無法請求對象做任何事情。對象接口與其功能實現(xiàn)是分離的,不同對象可以對請求做不同的實現(xiàn),也就是說,兩個有相同接口的對象可以有完全不同的實現(xiàn)。24對象接口
20、(動態(tài)綁定)當給對象發(fā)送請求時,所引起的具體操作既與請求本身有關又與接受對象有關。支持相同請求的不同對象可能對請求激發(fā)的操作有不同的實現(xiàn)。發(fā)送給對象的請求和它的相應操作在運行時刻的連接就稱之為動態(tài)綁定(dynamic binding)。25對象接口(多態(tài))動態(tài)綁定是指發(fā)送的請求直到運行時刻才受你的具體的實現(xiàn)的約束。因而,在知道任何有正確接口的對象都將接受此請求時,你可以寫一個一般的程序,它期待著那些具有該特定接口的對象。進一步講,動態(tài)綁定允許你在運行時刻彼此替換有相同接口的對象。這種可替換性就稱為多態(tài)( p o l y m o r p h i s m ),它是面向對象系統(tǒng)中的核心概念之一。多態(tài)
21、允許客戶對象僅要求其他對象支持特定接口,除此之外對其假設幾近于無。多態(tài)簡化了客戶的定義,使得對象間彼此獨立,并可以在運行時刻動態(tài)改變它們相互的關系。26設計模式幫助指定對象接口設計模式通過確定接口的主要組成成分及經接口發(fā)送的數(shù)據(jù)類型,來幫助你定義接口。設計模式也許還會告訴你接口中不應包括哪些東西。M e m e n t o ( 5 . 6 )模式是一個很好的例子,它描述了怎樣封裝和保存對象內部的狀態(tài),以便一段時間后對象能恢復到這一狀態(tài)。它規(guī)定了M e m e n t o對象必須定義兩個接口:一個允許客戶保持和復制m e m e n t o的限制接口,和一個只有原對象才能使用的用來儲存和提取m
22、e m e n t o中狀態(tài)的特權接口。設計模式也指定了接口之間的關系。特別地,它們經常要求一些類具有相似的接口;或它們對一些類的接口做了限制。例如, D e c o r a t o r ( 4 . 4 )和P r o x y ( 4 . 7 )模式要求D e c o r a t o r和P r o x y對象的接口與被修飾的對象和受委托的對象一致。而Vi s i t o r ( 5 . 11 )模式中,Vi s i t o r接口必須反映出v i s i t o r能訪問的對象的所有類。27抽象類抽象類(abstract class)的主要目的是為它的子類定義公共接口。一個抽象類將把它的部分
23、或全部操作的實現(xiàn)延遲到子類中,因此,一個抽象類不能被實例化。在抽象類中定義卻沒有實現(xiàn)的操作被稱為抽象操作(abstract operation)。非抽象類稱為具體類(concrete class)。子類能夠改進和重新定義它們父類的操作。更具體地說,類能夠重定義( o v e r r i d e )父類定義的操作,重定義使得子類能接管父類對請求的處理操作。類繼承允許你只需簡單的擴展其他類就可以定義新類,從而可以很容易地定義具有相近功能的對象族。28類繼承與接口繼承的比較理解對象的類( c l a s s )與對象的類型( t y p e -Java中的接口Interface)之間的差別非常重要。
24、一個對象的類定義了對象是怎樣實現(xiàn)的,同時也定義了對象的內部狀態(tài)和操作的實現(xiàn)。但是對象的類型只與它的接口有關,接口即對象能響應的請求的集合。一個對象可以有多個類型,不同類的對象可以有相同的類型。當然,對象的類和類型是有緊密關系的。因為類定義了對象所能執(zhí)行的操作,也定義了對象的類型。當我們說一個對象是一個類的實例時,即指該對象支持類所定義的接口。29設計模式幫助描述對象的實現(xiàn)面向對象設計的第一個原則:針對接口編程,而不是針對實現(xiàn)編程。不將變量聲明為某個特定的具體類的實例對象,而是讓它遵從抽象類所定義的接口。當你不得不在系統(tǒng)的某個地方實例化具體的類(即指定一個特定的實現(xiàn))時,創(chuàng)建型模式(Abstra
25、ct Factory(3.1),B u i l d e r ( 3 . 2 ),F(xiàn)actory Method(3.3),P r o t o t y p e ( 3 . 4 )和S i n g l e t o n ( 3 . 5 ) )可以幫你。通過抽象對象的創(chuàng)建過程,這些模式提供不同方式以在實例化時建立接口和實現(xiàn)的透明連接。創(chuàng)建型模式確保你的系統(tǒng)是采用針對接口的方式書寫的,而不是針對實現(xiàn)而書寫的。30運用復用機制對象組合是類繼承之外的另一種復用選擇。新的更復雜的功能可以通過組裝或組合對象來獲得。對象組合要求被組合的對象具有良好定義的接口。這種復用風格被稱為黑箱復用(black-box reus
26、e),因為對象的內部細節(jié)是不可見的。31繼承機制的優(yōu)缺點優(yōu)點:類繼承是在編譯時刻靜態(tài)定義的,且可直接使用,因為程序設計語言直接支持類繼承。類繼承可以較方便地改變被復用的實現(xiàn)。當一個子類重定義一些而不是全部操作時,它也能影響它所繼承的操作,只要在這些操作中調用了被重定義的操作。缺點因為繼承在編譯時刻就定義了,所以無法在運行時改變從父類繼承的實現(xiàn)。繼承常被認為“破壞了封裝性” 。子類中的實現(xiàn)與它的父類有如此緊密的依賴關系,以至于父類實現(xiàn)中的任何變化必然會導致子類發(fā)生變化。如果繼承下來的實現(xiàn)不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這種依賴關系限制了靈活性并最終限制了復用性。一個可用
27、的解決方法就是只繼承抽象類,因為抽象類通常提供較少的實現(xiàn)。32對象組合的優(yōu)點對象組合是通過獲得對其他對象的引用而在運行時刻動態(tài)定義的。組合要求對象遵守彼此的接口約定,進而要求更仔細地定義接口,而這些接口并不妨礙你將一個對象和其他對象一起使用。這還會產生良好的結果:因為對象只能通過接口訪問,所以我們并不破壞封裝性;只要類型一致,運行時刻還可以用一個對象來替代另一個對象;更進一步,因為對象的實現(xiàn)是基于接口寫的,所以實現(xiàn)上存在較少的依賴關系。對象組合對系統(tǒng)設計還有另一個作用,即優(yōu)先使用對象組合有助于你保持每個類被封裝,并被集中在單個任務上。這樣類和類繼承層次會保持較小規(guī)模,并且不太可能增長為不可控制
28、的龐然大物。另一方面,基于對象組合的設計會有更多的對象(而有較少的類),且系統(tǒng)的行為將依賴于對象間的關系而不是被定義在某個類中。33設計模式倡導對象組合的復用方式面向對象設計的第二個原則:優(yōu)先使用對象組合,而不是類繼承。理想情況下,你不應為獲得復用而去創(chuàng)建新的構件。你應該能夠只使用對象組合技術,通過組裝已有的構件就能獲得你需要的功能。但是事實很少如此,因為可用構件的集合實際上并不足夠豐富。使用繼承的復用使得創(chuàng)建新的構件要比組裝舊的構件來得容易。這樣,繼承和對象組合常一起使用。經驗表明:設計者往往過度使用了繼承這種復用技術。但依賴于對象組合技術的設計卻有更好的復用性(或更簡單)。設計模式中一再使
29、用對象組合技術。34怎樣選擇設計模式使用設計模式的最佳途徑將各種設計模式爛熟于心,在你進行設計時識別在哪些地方能夠運用這些設計模式。對于初學者來說,要找出一個針對特定設計問題的模式可能還是很困難的,尤其是當面對一組你還不怎么熟悉的新模式時。下面給出幾個不同的方法,幫助你發(fā)現(xiàn)適合你手頭問題的設計模式:考慮設計模式是怎樣解決設計問題的前面討論了設計模式怎樣幫助你找到合適的對象、決定對象的粒度、指定對象接口以及設計模式解決設計問題的幾個其他方法。參考這些討論會有助于你找到合適的模式。瀏覽模式的意圖部分通讀每個模式的意圖,找出和你的問題相關的一個或多個模式。你可以使用模式分類方法縮小你的搜查范圍。研究模式怎樣互相關聯(lián)圖1-1 以圖形方式顯示了設計模式之間的關系
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銷售人員月工作總結與計劃(16篇)
- 行政組織理論的未來視野試題及答案
- 數(shù)據(jù)庫系統(tǒng)中的緩存機制試題及答案
- 個人房屋買賣合同范文(17篇)
- 施工現(xiàn)場管理試題及答案
- 行政決策過程中的實驗與實證研究試題及答案
- 小學語文減負提質總結(5篇)
- 行政理論在新形式下的應用考題及答案
- 行政管理中的資源配置效率研究試題及答案
- 數(shù)據(jù)庫數(shù)據(jù)交互與實時性試題及答案
- 關愛父母健康知到章節(jié)答案智慧樹2023年哈爾濱商業(yè)大學
- 吡格列酮二甲雙胍片聯(lián)合胰島素治療2型糖尿病體會
- 認養(yǎng)一頭牛IPO上市招股書
- 全國2022年4月自學考試00149國際貿易理論與實務試題及答案(有章頁)
- 勞動用工常見風險課件
- 小學數(shù)學北師大五年級上冊六 組合圖形的面積組合圖形的面積 -課件
- 距骨軟骨損傷
- 調速器的構造與維修課件
- 《育兒壓力研究國內外研究綜述》
- 醫(yī)學免疫學課件:免疫檢查點抑制劑
- 新版中日交流標準日本語初級下同步測試卷及答案(第30課)
評論
0/150
提交評論