




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第2章实例研究:Lexi文档编辑器AWYSIWYGdocumenteditor.Mixtextandgraphicsfreelyinvariousformattingstyles.TheusualPull-downmenusScrollbarsPageiconsforjumpingaroundthedocument.通过本实例设计,学习设计模式的实际应用lexi设计案例分析全文共76页,当前为第1页。22.1设计问题Lexi设计的7个问题1文档结构:对文档内部表示的选择几乎影响Lexi设计的每个方面。2格式化3修饰用户界面4支持多种视感标准5支持多种窗口系统6用户操作7拼写检查上述每个问题都有一组相关联的目标集合和限制条件集合。lexi设计案例分析全文共76页,当前为第2页。32.2文档结构目标保持文档的物理结构。即将文本和图形安排到行、列和表等。可视化生成和显示文档。根据显示位置来映射文档内部表示的元素。限制条件应该一致地对待文本和图形。应该一致地对待简单元素和复合元素。但文本分析依赖于被分析对象的类型。lexi设计案例分析全文共76页,当前为第3页。4解决方案:递归组合递归组合:Buildingmorecomplexelementsoutofsimplerones.行——列(段落)——页(P24第2段第2行)第5行第2列的第10个元素
Thetenthelementinlinefiveofcolumntwo,隐含:EachobjecttypeneedsacorrespondingclassAllmusthavecompatibleinterfaces(inheritance)图2包含正文和图形的递归组合图3递归组合的对象结构lexi设计案例分析全文共76页,当前为第4页。5Glyph (图元类)BaseclassforcomposablegraphicalobjectsAnAbstractclassforallobjectsthatcanappearinadocument.Bothprimitiveandcomposed.voidinsert(Glyph)
voidremove(Glyph)
Glyphchild(int)
Glyphparent()管理子图元的接口booleanintersects(Coord,Coord)判断一个指定的点是否与图元相交voiddraw(Window*)VoidBounds(Rect)在窗口上表示自己返回图元占用的矩形面积操作任务基本接口:子类:Character,Image,Space,Row,Columnlexi设计案例分析全文共76页,当前为第5页。6
图元类层次Notetheinherentrecursioninthishierarchyi.e.,aRowisaGlyph&aRowalsohasGlyphs!lexi设计案例分析全文共76页,当前为第6页。7GlyphInterfaceandresponsibilitiesGlyphsknowhowtodrawthemselvesGlyphsknowwhatspacetheyoccupyGlyphsknowtheirchildrenandparentspublicabstractclassGlyph{//appearancepublicabstractvoiddraw(Windoww);publicabstractRectgetBounds();//hitdetectionpublicabstractbooleanintersects(Point);//structurepublicabstractvoidinsert(Glyphg,inti);publicabstractvoidremove(Glyphg);publicabstractGlyphchild(inti);publicabstractGlyphparent();}lexi设计案例分析全文共76页,当前为第7页。8
COMPOSITE
模式objectstructural意图treatindividualobjects&multiple,recursively-composedobjectsuniformly适用objectsmustbecomposedrecursively,andnodistinctionbetweenindividual&composedelements,andobjectsinstructurecanbetreateduniformlyStructurelexi设计案例分析全文共76页,当前为第8页。9COMPOSITE
模式(cont’d)objectstructural效果uniformity:treatcomponentsthesameregardlessofcomplexityextensibility:newComponentsubclassesworkwhereveroldonesdo实现doComponentsknowtheirparents?保持从子部件到父部件的引用能简化组合结构的遍历和管理uniforminterfaceforbothleaves&composites?最大化Component接口don’tallocatestorageforchildreninComponentbaseclassresponsibilityfordeletingchildren由Composite负责删除其子节点lexi设计案例分析全文共76页,当前为第9页。102.3格式化格式化:将一个图元集合分解为若干行目标:自动换行Breakingupadocumentintolines.ManydifferentalgorithmstradeoffqualityforspeedComplexalgorithms限制条件Wanttokeeptheformattingalgorithmwell-encapsulated.independentofthedocumentstructurecanaddformattingalgorithmwithoutmodifyingGlyphscanaddGlyphswithoutmodifyingtheformattingalgorithm.Wanttomakeitdynamicallychangeable.lexi设计案例分析全文共76页,当前为第10页。11Composition&CompositorCompositorbaseclassabstractslinebreakingalgorithmsubclassesforspecializedalgorithms,
e.g.,SimpleCompositor,TeXCompositor接口格式化内容:voidSetComposition(Composition*)格式化:virtualvoidCompose()Compositioncompositeglyphsuppliedacompositor&leafglyphscreatesrow-columnstructureasdirectedbycompositorlexi设计案例分析全文共76页,当前为第11页。12Composition&Compositor一个未格式化的Composition对象只包含组成文档基本内容的可见图元,它并不包含像行和列这样决定文档物理结构的图元。Composite对象只在刚被创建并以待格式化的图元进行初始化后的状态当Composition对象需要格式化时,调用它的Compositor的Compose操作。Compositor依次遍历Composition的各个图元,根据分行算法插入新的行和列图元。Generatedinaccordancewithcompositorstrategies&donotaffectcontentsofleafglyphslexi设计案例分析全文共76页,当前为第12页。13Compositor&CompositionCompositorclasswillencapsulateaformattingalgorithm.Strategylexi设计案例分析全文共76页,当前为第13页。14Compositor&Composition分行算法封装能增加新的Compositor子类而不触及Glyph类可在运行时刻改变分行算法在Composition接口中增加一个SetCompositor操作lexi设计案例分析全文共76页,当前为第14页。15STRATEGY模式
objectbehavioral意图defineafamilyofalgorithms,encapsulateeachone,&maketheminterchangeabletoletclients&algorithmsvaryindependently适用性whenanobjectshouldbeconfigurablewithoneofmanyalgorithms,andallalgorithmscanbeencapsulated,andoneinterfacecoversallencapsulations结构lexi设计案例分析全文共76页,当前为第15页。16STRATEGY模式(cont’d)objectbehavioral效果greaterflexibility,reusecanchangealgorithmsdynamicallystrategycreation&communicationoverheadinflexibleStrategyinterfacesemanticincompatibilityofmultiplestrategiesusedtogether实现exchanginginformationbetweenaStrategy&itscontextstaticstrategyselectionviatemplateslexi设计案例分析全文共76页,当前为第16页。172.4修饰用户界面Wishtoaddvisiblebordersandscroll-barsaroundpages.Inheritanceisonewaytodoit.leadstoclassproliferationBorderedComposition,ScrollableComposition,BorderedScrollableCompositioninflexibleatrun-timeWillhaveclassesBorderScrollerTheywillbeGlyphstheyarevisibleclientsshouldn’tcareifapagehasaborderornotTheywillbecomposed.butinwhatorder?lexi设计案例分析全文共76页,当前为第17页。182.4修饰用户界面目标:addaframearoundtextcompositionaddscrollingcapability限制条件:embellishmentsshouldbereusablewithoutsubclassing,i.e.,sotheycanbeaddeddynamicallyatruntimeshouldgounnoticedbyclientslexi设计案例分析全文共76页,当前为第18页。19解决方案:“Transparent”Enclosure(透明围栏)Monoglyph:起修饰作用的图元的抽象类baseclassforglyphshavingonechildoperationsonMonoGlyphpassthroughtochildMonoGlyphsubclasses:Frame:addsaborderofspecifiedwidthScroller:scrolls/clipschild,addsscrollbarslexi设计案例分析全文共76页,当前为第19页。20MonoGlyphBordercalls{MonoGlyph.draw();drawBorder();}Decoratorlexi设计案例分析全文共76页,当前为第20页。21TransparentEnclosuresingle-childcompositioncompatibleinterfacesEnclosurewilldelegateoperationstosinglechild,butcanaddstateaugmentbydoingworkbeforeorafterdelegatingtothechild.lexi设计案例分析全文共76页,当前为第21页。22DECORATOR
模式objectstructural意图augmentOneobjectwithnewresponsibilities适用性whenextensionbysubclassingisimpracticalforresponsibilitiesthatcanbewithdrawnStructurelexi设计案例分析全文共76页,当前为第22页。23DECORATOR模式
(cont’d)objectstructural效果responsibilitiescanbeadded/removedatrun-timeavoidssubclassexplosionrecursivenestingallowsmultipleresponsibilities实现interfaceconformanceusealightweight,abstractbaseclassforDecoratorlexi设计案例分析全文共76页,当前为第23页。242.5支持多种视感标准Wanttheapplicationtobeportableacrossdiverseuserinterfacelibraries.EveryuserinterfaceelementwillbeaGlyph.Somewilldelegatetoappropriateplatform-specificoperations.lexi设计案例分析全文共76页,当前为第24页。25MultipleLook&Feels目标:supportmultiplelook&feelstandardsgeneric,Motif,Swing,PM,Macintosh,Windows,...extensibleforfuturestandards限制条件:don’trecodeexistingwidgetsorclientsswitchlook&feelwithoutrecompilinglexi设计案例分析全文共76页,当前为第25页。26解决方案:AbstractObjectCreationInsteadof
Scrollbar*sb=newMotifScrollbar();use
Scrollbar*sb=factory->createScrollbar();wherefactoryisaninstanceofMotifFactorythisbegsthequestionofwhocreatedthefactory!lexi设计案例分析全文共76页,当前为第26页。27FactoryInterfacedefines“manufacturinginterface”subclassesproducespecificproductssubclassinstancechosenatrun-time//ThisclassisessentiallyaJavainterfaceclassFactory{public:Scrollbar*createScrollbar()=0;Menu*createMenu()=0;...};lexi设计案例分析全文共76页,当前为第27页。28ObjectFactoriesUsualmethod:ScrollBarsb=newMotifScrollBar();Factorymethod:ScrollBarsb=guiFactory.createScrollBar();lexi设计案例分析全文共76页,当前为第28页。29ProductObjectsTheoutputofafactoryisaproduct.abstractconcreteAbstractFactorylexi设计案例分析全文共76页,当前为第29页。30BuildingtheFactoryIfknownatcompiletime(e.g.,Lexiv1.0–onlyMotifimplemented).GUIFactoryguiFactory=newMotifFactory();
Setatstartup(Lexiv2.0)StringLandF=appProps.getProperty("LandF");GUIFactoryguiFactory;if(LandF.equals("Motif")) guiFactory=newMotifFactory();...Changeablebyamenucommand(Lexiv3.0)re-initialize‘guiFactory’re-buildtheUISingletonlexi设计案例分析全文共76页,当前为第30页。31ABSTRACTFACTORY
模式objectcreational意图createfamiliesofrelatedobjectswithoutspecifyingclassnames适用性whenclientscannotanticipategroupsofclassestoinstantiateStructurelexi设计案例分析全文共76页,当前为第31页。32ABSTRACTFACTORY模式(cont’d)objectcreational效果flexibility:removestypedependenciesfromclientsabstraction:hidesproduct’scompositionhardtoextendfactoryinterfacetocreatenewproducts实现parameterizationasawayofcontrollinginterfacesizeconfigurationwithPrototypes,i.e.,determineswhocreatesthefactorieslexi设计案例分析全文共76页,当前为第32页。332.6支持多种窗口系统目标:makecompositionappearinawindowsupportmultiplewindowsystems限制条件:minimizewindowsystemdependenciesinapplication&frameworkcodelexi设计案例分析全文共76页,当前为第33页。342.6支持多种窗口系统是否可以用AbstractFactory模式?EachGUIlibrarywilldefineitsownconcreteclasses.无法给每种窗口组件都创建一个公共抽象产品类StartwithanabstractWindowhierarchyuser-levelwindowabstractiondisplaysaglyph(structure)windowsystem-independenttask-relatedsubclasses
(e.g.,IconWindow,PopupWindow)lexi设计案例分析全文共76页,当前为第34页。35classWindow{public:...voidiconify();//window-managementvoidraise();...voiddrawLine(...);//device-independentvoiddrawText(...);//graphicsinterface...};WindowInterfacelexi设计案例分析全文共76页,当前为第35页。36Window实现DefinedinterfaceLexidealswith,butwheredoestherealwindowinglibrarycomeintoit?CoulddefinealternateWindowclasses&subclasses.AtbuildtimecansubstitutetheappropriateoneCouldsubclasstheWindowhierarchy.Bridgelexi设计案例分析全文共76页,当前为第36页。37Window实现代码示例publicclassRectangleextendsGlyph{publicvoiddraw(Windoww){w.drawRect(x0,y0,x1,y1);}...}publicclassWindow{publicvoiddrawRect(Coordx0,y0,x1,y1){imp.drawRect(x0,y0,x1,y1);}...}publicclassXWindowImpextendsWindowImp{publicvoiddrawRect(Coordx0,y0,x1,y1){...XDrawRectangle(display,windowId,graphics,x,y,w,h);}}lexi设计案例分析全文共76页,当前为第37页。38配置‘imp’publicabstractclassWindowSystemFactory{publicabstractWindowImpcreateWindowImp();publicabstractColorImpcreateColorImp();...}publicclassXWindowSystemFactoryextendsWindowSystemFactory{publicWIndowImpcreateWindowImp(){returnnewXWindowImp();}...}publicclassWindow{Window(){imp=windowSystemFactory.createWindowImp();}...}AbstractFactorywell-knownobjectlexi设计案例分析全文共76页,当前为第38页。39对象结构
Note:thedecouplingbetweenthelogicalstructureofthecontentsinawindowfromthephysicalrenderingofthecontentsinthewindowlexi设计案例分析全文共76页,当前为第39页。40BRIDGE模式
objectstructural意图separatea(logical)abstractioninterfacefromits(physical)implementation(s)适用性wheninterface&implementationshouldvaryindependentlyrequireauniforminterfacetointerchangeableclasshierarchiesStructurelexi设计案例分析全文共76页,当前为第40页。41BRIDGE模式(cont’d)objectstructural效果abstractioninterface&implementationareindependentimplementationscanvarydynamicallyone-size-fits-allAbstraction&Implementorinterfaces实现sharingImplementors&referencecountingcreatingtherightimplementorlexi设计案例分析全文共76页,当前为第41页。422.7用户操作Operationscreatenew,save,cut,paste,quit,…UImechanismsmousing&typinginthedocumentpull-downmenus,pop-upmenus,buttons,kbdaccelerators,…Wishtode-coupleoperationsfromUImechanismre-usesamemechanismformanyoperationsre-usesameoperationbymanymechanismsOperationshavemanydifferentclasseswishtode-coupleknowledgeoftheseclassesfromtheUIWishtosupportmulti-levelundoandredolexi设计案例分析全文共76页,当前为第42页。43CommandsAbuttonorapull-downmenuisjustaGlyph.buthaveactionscommandassociatedwithuserinpute.g.,MenuItemextendsGlyph,ButtonextendsGlyph,…Could…PageFwdMenuItemextendsMenuItemPageFwdButtonextendsButtonCould…HaveaMenuItemattributewhichisafunctioncall.没有强调撤销/重做操作很难将状态和函数联系起来函数很难扩充,并且很难部分复用。Will…HaveaMenuItemattributewhichisacommandobject.lexi设计案例分析全文共76页,当前为第43页。44Command:EncapsulateEachRequest
ACommandencapsulatesCommandmayimplementtheoperationsitself,ordelegatethemtootherobject(s)anoperation(execute())aninverseoperation(unexecute())aoperationfortestingreversibility
(boolean
reversible())statefor(un)doingtheoperationlexi设计案例分析全文共76页,当前为第44页。45Command类层次Commandisanabstractclassforissuingrequests.lexi设计案例分析全文共76页,当前为第45页。46MenuItem与Command之间的关系voidMenuItem::clicked(){
command->execute();
}voidPasteCommand::execute(){
//dothepaste
}voidCopyCommand::execute(){
//dothecopy
}lexi设计案例分析全文共76页,当前为第46页。47InvokingCommandsWhenaninteractiveGlyphistickled,itcallstheCommandobjectwithwhichithasbeeninitialized.Commandlexi设计案例分析全文共76页,当前为第47页。48Undo/RedoAddanunexecute()methodtoCommandReversestheeffectsofaprecedingexecute()operationusingwhateverundoinformationexecute()storedintotheCommandobject.AddaisUndoable()andahadnoEffect()methodMaintainCommandhistory:lexi设计案例分析全文共76页,当前为第48页。49COMMAND模式
objectbehavioral意图encapsulatetherequestforaservice适用性toparameterizeobjectswithanactiontoperformformultilevelundo/redoStructurelexi设计案例分析全文共76页,当前为第49页。50COMMAND模式(cont’d)objectbehavioral效果abstractsexecutorofaservicesupportsarbitrary-levelundo-redocompositionyieldsmacro-commandsmightresultinlotsoftrivialcommandsubclasseslexi设计案例分析全文共76页,当前为第50页。512.8拼写检查和断字处理Textualanalysischeckingformisspellingsintroducinghyphenationpointswhereneededforgoodformatting.Wanttosupportmultiplealgorithms.Wanttomakeiteasytoaddnewalgorithms.WanttomakeiteasytoaddnewtypesoftextualanalysiswordcountgrammarLegibility(易读性)Wishtode-coupletextualanalysisfromtheGlyphclasses.lexi设计案例分析全文共76页,当前为第51页。522.8拼写检查和断字处理目标:analyzetextforspellingerrorsintroducepotentialhyphenation(断字)sites限制条件:supportmultiplealgorithmsdon’ttightlycouplealgorithmswithdocumentstructurelexi设计案例分析全文共76页,当前为第52页。53AccessingScatteredInformationNeedtoaccessthetextletter-by-letter.OurdesignhastextscatteredallovertheGlyphhierarchy.DifferentGlyphshavedifferentdatastructuresforstoringtheirchildren(lists,trees,arrays,…).Sometimesneedalternateaccesspatterns:spellcheck:forwardsearchback:backwardsevaluatingequations:inordertreetraversallexi设计案例分析全文共76页,当前为第53页。54EncapsulatingAccess&TraversalsCouldreplaceindex-orientedaccess(asshownbefore)bymoregeneralaccessorsthataren’tbiasedtowardsarrays.Glyphg=…for(g.first(PREORDER);!g.done();g->next()){Glyphcurrent=g->getCurrent();…}Problems:can’tsupportnewtraversalswithoutextendingenumandmodifyingallparentGlyphtypes.Can’tre-usecodetotraverseotherobjectstructures(e.g.,Commandhistory).lexi设计案例分析全文共76页,当前为第54页。55解决方案:封装遍历IteratorencapsulatesatraversalalgorithmwithoutexposingrepresentationdetailstocallersusesGlyph’schildenumerationoperationThisisanexampleofa“preorderiterator”lexi设计案例分析全文共76页,当前为第55页。56Iterator层次Iteratorlexi设计案例分析全文共76页,当前为第56页。57UsingIteratorsGlyph*g;Iterator<Glyph*>*i=g->CreateIterator();for(i->First();!i->IsDone();i->Next()){Glyph*child=i->CurrentItem();//dosomethingwithcurrentchild}lexi设计案例分析全文共76页,当前为第57页。58InitializingIteratorsIterator<Glyph*>*Row::CreateIterator(){returnnewListIterator<Glyph*>(_children);}lexi设计案例分析全文共76页,当前为第58页。59ImplementingaComplexIteratorvoidPreorderIterator::First(){Iterator<Glyph*>*i=_root->CreateIterator();if(i){i->First();_iterators.RemoveAll();_iterators.Push(i);}}Glyph*PreorderIterator::CurrentItem()const{return_iterators.Size()>0?_iterators.Top()->CurrentItem():0;}lexi设计案例分析全文共76页,当前为第59页。60ImplementingaComplexIterator(cont’d)voidPreorderIterator::Next(){Iterator<Glyph*>*i=_iterators.Top()->CurrentItem()->CreateIterator();i->First();_iterators.Push(i);while(_iterators.Size()>0&&_iterators.Top()->IsDone()){delete_iterators.Pop();_iterators.Top()->Next();}}lexi设计案例分析全文共76页,当前为第60页。61ITERATOR模式
objectbehavioral意图accesselementsofacontainerwithoutexposingitsrepresentation适用性requiremultipletraversalalgorithmsoveracontainerrequireauniformtraversalinterfaceoverdifferentcontainerswhencontainerclasses&traversalalgorithmmustvaryindependentlyStructurelexi设计案例分析全文共76页,当前为第61页。62ITERATOR模式
(cont’d)objectbehavioral效果flexibility:aggregate&traversalareindependentmultipleiterators&multipletraversalalgorithmsadditionalcommunicationoverheadbetweeniterator&aggregate实现internalversusexternaliteratorsviolatingtheobjectstructure’sencapsulationrobustiteratorslexi设计案例分析全文共76页,当前为第62页。63ITERATOR
模式(cont’d)objectbehavioralintmain(intargc,char*argv[]){vector<string>args;for(inti=0;i<argc;i++) args.push_back(string(argv[i]));for(vector<string>::iteratori(args.begin());i!=args.end();i++)cout<<*i;cout<<endl;return0;}IteratorsareusedheavilyintheC++StandardTemplateLibrary(STL)ThesameiteratorpatterncanbeappliedtoanySTLcontainer!lexi设计案例分析全文共76页,当前为第63页。64访问动作Nowthatwecantraverse,weneedtoaddactionswhiletraversingthathavestatespelling,hyphenation,…CouldaugmenttheIteratorclasses……butthatwouldreducetheirreusabilityCouldaugmenttheGlyphclasses……butwillneedtochangeGlyphclassesforeachnewanalysisWillneedtoencapsulatetheanalysisinaseparateobjectlexi设计案例分析全文共76页,当前为第64页。65Visitordefinesaction(s)ateachstepoftraversalavoidswiringaction(s)intoGlyphsiteratorcallsglyph’saccept(Visitor)ateachnodeaccept()callsbackonvisitor(aformof“staticpolymorphism”basedonmethodoverloadingbytype)voidCharacter::accept(Visitor&v){v.visit(*this);}classVisitor{public:virtualvoidvisit(Character&);virtualvoidvisit(Rectangle&);virtualvoidvisit(Row&);//etc.forallrelevantGlyphsubclasses
};lexi设计案例分析全文共76页,当前为第65页。66ActionsinIteratorsIteratorwillcarrytheanalysisobjectalongwithitasititerates.Theanalyzerwillaccumulatestate.e.g.,charactersforaspellchecklexi设计案例分析全文共76页,当前为第66页。67AvoidingDowncastsHowcantheanalysisobjectdistinguishdifferentkindsofGlyphswithoutresortingtoswitchstatementsanddowncasts.e.g.,avoid:publicclassSpellingCheckerextends…{publicvoidcheck(Glyphg){if(ginstanceofCharacterGlyph){CharacterGlyphcg=(CharacterGlyph)g;//analyzethecharacter}elseif(ginstanceofRowGlyph){rowGlyphrg=(RowGlyph)g;//preparetoanalyzethechildglyphs}else…}}lexi设计案例分析全文共76页,当前为第67页。68AcceptingVisitorspublicabstractclassGlyph{publicabstractvoidaccept(Visitorv);…}publicclassCharacterGlyphextendsGlyph{publicvoidaccept(Visitorv){v.visitCharacterGlyph(this);}…}lexi设计案例分析全文共76页,当前为第68页。69Visitor&SubclassespublicabstractclassVisitor{publicvoidvisitCharacterGlyph(CharacterGlyphcg){/*donothing*/}publicabstractvoidvisitRowGlyph(RowGlyphrg);{/*donothing*/}…}publicclassSpellingVisitorextendsVisitor{publicvoidvisitCharacterGlyph(CharacterGlyphcg){…}}Visitorlexi设计案例分析全文共76页,当前为第69页。70SpellingVisitorpublicclassSpellingVisitorextendsVisitor{privateVectormisspellings=newVector();privateStringcurrentWord=“”;publicvoidvisitCharacterGlyph(CharacterGlyphcg){charc=cg->get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 索道支架焊接工艺参数调整工艺考核试卷及答案
- 金属成形机床维修规范考核试卷及答案
- 动物胶制造工岗前考核试卷及答案
- 卡轨车司机岗前考核试卷及答案
- 城市轨道交通行车调度员适应性考核试卷及答案
- 现代学徒制下高职校企协同专业诊改体系构建
- 养殖技术考试题目及答案
- 美术中考专业试题及答案
- 果树专业试题及答案
- 单招空乘专业试题及答案
- 2025年第一届安康杯安全生产知识竞赛试题题库及答案(完整版)
- 电力工程冬季施工安全技术措施
- 贵州省贵阳市2026届高三上学期摸底考试数学试卷含答案
- 公司年度员工安全教育培训计划
- 供电所安全教育培训课件
- 2025年杭州市上城区望江街道办事处 编外人员招聘8人考试参考试题及答案解析
- 百果园水果知识培训资料课件
- 2025年灌注桩考试题及答案
- 公司安全生产责任书范本
- 养老护理员培训班课件
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
评论
0/150
提交评论