郭新乐软件设计与体系结构-实验4_第1页
郭新乐软件设计与体系结构-实验4_第2页
郭新乐软件设计与体系结构-实验4_第3页
郭新乐软件设计与体系结构-实验4_第4页
郭新乐软件设计与体系结构-实验4_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

郭新乐软件设计与体系结构-实验4郭新乐软件设计与体系结构-实验4郭新乐软件设计与体系结构-实验4资料仅供参考文件编号:2022年4月郭新乐软件设计与体系结构-实验4版本号:A修改号:1页次:1.0审核:批准:发布日期:大连海事大学软件设计与体系结构课程实验报告(2015-2016学年第一学期)实验四设计模式应用班级:计算机科学与技术2班学号:51姓名:程子璇指导教师:谢兄成绩:2016年01月02日

目录1 实验目的 32 实验内容 33 实验要求 34 实验步骤 35 总结与体会 12 实验中出现的问题及其解决方案 12 总结 12 体会 121实验目的利用Observer、单件等设计模式开发实现一个小的系统。通过常用的设计模式的实例实验,熟悉设计模式特点及应用条件,掌握基于设计模式的软件系统的设计与开发应用。实验内容用C++语言实现系统。利用设计模式设计并实现一个简单的图形编辑系统。程序截图实验要求深入复习教材中介绍的各种设计模式。实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。实验步骤采用单件设计模式设计抽象工厂类,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。 类结构图代码原型namespaceges{ classAbstractFactory{ public: ~AbstractFactory(){ if(_count==1){ if(_pInstance){ delete_pInstance; } } --_count; } protected: AbstractFactory(){} public: virtualLine*CreateProductLine(constint&posX0,constint&posY0, constint&posX1,constint&posY1,constint&id) {returnnullptr;} virtualSymbol*CreateProductSymbol(constint&posX,constint&posY,constint&id) {returnnullptr;} virtualText*CreateProductText(constint&posX,constint&posY,constint&id) {returnnullptr;} virtualRectangle*CreateProductRectangle(constint&posX0,constint&posY0,constint&posX1,constint&posY1,constint&id) {returnnullptr;} virtualPicture*CreateProductPicture(constint&id){returnnewPicture(id);}; public: staticAbstractFactory*CreateInstance(){ if(nullptr==_pInstance){ _pInstance=newAbstractFactory(); } ++_count; return_pInstance; } protected: static AbstractFactory* _pInstance; static int _count; }; classConcreteFactory1:publicAbstractFactory{ public: ~ConcreteFactory1(){ if(_count==1){ if(_pInstance){ delete_pInstance; } } --_count; } private: ConcreteFactory1() {} public: virtualLine*CreateProductLine(constint&posX0,constint&posY0, constint&posX1,constint&posY1,constint&id)override{ returnnewLine1(posX0,posY0,posX1,posY1,id); } virtualSymbol*CreateProductSymbol(constint&posX,constint&posY,constint&id)override{ returnnewSymbol1(posX,posY,id); } virtualText*CreateProductText(constint&posX,constint&posY,constint&id)override{ returnnewText1(TEXT("双击输入标注内容"),posX,posY,id); } virtualRectangle*CreateProductRectangle(constint&posX0,constint&posY0,constint&posX1,constint&posY1,constint&id)override{ returnnewRectangle1(posX0,posY0,posX1,posY1,id); } if(FALSE==WriteFile(hFile,>,sizeof(int),&bw,nullptr)) returnfalse; for(auto&pObj:_pGraphics){ if(FALSE==WriteFile(hFile,&group,sizeof(int),&bw,nullptr)) returnfalse; if(false==pObj->Save(hFile)){ CloseHandle(hFile); returnfalse; } } returntrue; } virtual boolLoad(HANDLEhFile)override; virtualintQueryInterface()constoverride{ returnGT_PICTURE; } public: virtualboolIsHit(constint&x,constint&y)constoverride{ for(auto&pObj:_pGraphics){ if(pObj->IsHit(x,y)) returntrue; } returnfalse; } virtualvoidGetGraphicsPtrs(std::vector<Graphic*>&pGraphics)const{ pGraphics=_pGraphics; } public: inline voidSetReal(constbool&real){_real=real;} private: std::vector<Graphic*> _pGraphics; bool _real; };namespaceges{ classClient; } }; classLineabstract:publicGraphic{ public: Line(constint&id):Graphic(id){} public: virtualvoidSetStartPos(constint&posX,constint&posY)=0; virtualvoidSetEndPos(constint&posX,constint&posY)=0; virtualvoidSetText(TCHAR*pText)=0; public: virtualboolIsPossibleToViewThis()const=0; public: } }; classTextabstract:publicGraphic{ public: Text(constint&id):Graphic(id){} public: virtualvoidSetFontSize(constint&fontSize)=0; virtualvoidSetText(TCHAR*pText)=0; public: } }; classRectangleabstract:publicGraphic { public: Rectangle(constint&id):Graphic(id){} public: virtualvoidSetStartPos(constint&posX,constint&posY)=0; virtualvoidSetEndPos(constint&posX,constint&posY)=0; virtualboolIsPossibleToViewThis()const=0; public: } }; classLine1:publicLine{ public: Line1(constint&posX0,constint&posY0, constint&posX1,constint&posY1,constint&id); ~Line1(); public: } private: int _posX0; int _posY0; int _posX1; int _posY1; }; classLine2:publicLine{ public: Line2(TCHAR*pText,constint&posX0,constint&posY0, constint&posX1,constint&posY1,constint&id); ~Line2(); public: } private: int _posX0; int _posY0; int _posX1; int _posY1; public: TCHAR* _pText; }; classText1:publicText{ public: Text1(TCHAR*pText,constint&posX,constint&posY,constint&id); ~Text1(); public: } public: virtualvoidSetFontSize(constint&fontSize)override; virtualvoidSetText(TCHAR*pText)override; private: int _posX; int _posY; int _font_size; TCHAR* _pText; HFONT _hFont; }; classText2:publicText{ public: Text2(TCHAR*pText,constint&posX,constint&posY,constint&id); ~Text2(); public: } public: virtualvoidSetFontSize(constint&fontSize)override; virtualvoidSetText(TCHAR*pText)override; private: int _posX; int _posY; int _font_size; TCHAR* _pText; HFONT _hFont; }; classRectangle1:publicRectangle{ public: Rectangle1(constint&posX0,constint&posY0, constint&posX1,constint&posY1,constint&id); ~Rectangle1(); public: virtualvoidSetStartPos(constint&posX,constint&posY)override; virtualvoidSetEndPos(constint&posX,constint&posY)override; public: } private: int _posX0; int _posY0; int _posX1; int _posY1; }; classRectangle2:publicRectangle { public: Rectangle2(constint&posX0,constint&posY0, constint&posX1,constint&posY1,constint&id); ~Rectangle2(); public: virtualvoidSetStartPos(constint&posX,constint&posY)override; virtualvoidSetEndPos(constint&posX,constint&posY)override; public: } private: int _posX0; int _posY0; int _posX1; int _posY1; }; classSymbol1:publicSymbol{ public: Symbol1(constint&posX,constint&posY,constint&id); ~Symbol1(); public: } public: virtualvoidSetText(TCHAR*pText)override{} private: int _posX; int _posY; float _size; }; classSymbol2:publicSymbol{ public: Symbol2(TCHAR*pText,constint&posX,constint&posY,constint&id); ~Symbol2(); public: } public: virtualvoid SetText(TCHAR*pText)override; private: int _posX; int _posY; float _size; TCHAR* _pText; };} Attach(_tempGraphicObj[2]); _tempGraphicObj[2]=nullptr; } _optState=None; hdc=GetDC(_hWnd); break; caseToAddSymbol2: _pFactory=ConcreteFactory2::CreateInstance(); pGraphic=_pFactory->CreateProductSymbol(vX,vY,_idPool); ++_idPool; Attach(pGraphic); _optState=None; break; caseToAddLine1: _pFactory=ConcreteFactory1::CreateInstance(); pGraphic=_pFactory->CreateProductLine(vX,vY,vX,vY,_idPool); ++_idPool; Attach(pGraphic); _tempGraphicObj[0]=pGraphic; _optState=AddingLine1; break; caseToAddLine2: _pFactory=ConcreteFactory2::CreateInstance(); pGraphic=_pFactory->CreateProductLine(vX,vY,vX,vY,_idPool); ++_idPool; Attach(pGraphic); _tempGraphicObj[0]=pGraphic; _optState=AddingLine2; break; caseToAddText1: _pFactory=ConcreteFactory1::CreateInstance(); pGraphic=_pFactory->CreateProductText(vX,vY,_idPool); ++_idPool; Attach(pGraphic); _optState=None; break; caseToAddText2: _pFactory=ConcreteFactory2::CreateInstance(); pGraphic=_pFactory->CreateProductText(vX,vY,_idPool); ++_idPool; Attach(pGraphic); _optState=None; break; caseToAddRectangle1: _pFactory=ConcreteFactory1::CreateInstance(); pGraphic=_pFactory->CreateProductRectangle(vX,vY,vX,vY,_idPool); ++_idPool; Attach(pGraphic); _tempGraphicObj[0]=pGraphic; _optState=AddingRectangle1; break; caseToAddRectangle2: _pFactory=ConcreteFactory2::CreateInstance(); pGraphic=_pFactory->CreateProductRectangle(vX,vY,vX,vY,_idPool); ++_idPool; Attach(pGraphic); _tempGraphicObj[0]=pGraphic; _optState=AddingRectangle1; break; _optState=None; break; default: i=0; for(auto&pObserver:_pObservers){ if(pObserver->IsHit(vX,vY)){ ++i; if((MK_SHIFT|MK_LBUTTON)==wParam){ es)\0*.ges\0所有文件(*.*)\0*.*\0\0"); =l_szFileName; =1; =OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST; if(::GetOpenFileName(&l_str_ofn)){ if(false==g_pClient->LoadFile(l_szFileName)){ MessageBox(hWnd,TEXT("Failedtoload."),TEXT("Error"),MB_OK); } } break; caseID_FILE_SAVE: if(0==lstrlen(l_szFileName)) goto____lable_save_as; if(false==g_pClient->SaveFile(l_szFileName)){ MessageBox(hWnd,TEXT("Failedtosave."),TEXT("Error"),MB_OK); } break; caseID_FILE_SAVEAS:____lable_save_as: memset(&l_str_ofn,0,sizeof(l_str_ofn)); =sizeof(OPENFILENAME); =MAX_PATH; =TEXT("GES图形文件(*.ges)\0*.ges\0所有文件(*.*)\0*.*\0\0"); =l_szFileName; =1; =OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST; if(::GetSaveFileName(&l_str_ofn)){ if(false==g_pClient->SaveFile(l_szFileName)){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论