版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
郭新乐软件设计与体系结构-实验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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化学镀膜工操作评估强化考核试卷含答案
- 物流服务师达标竞赛考核试卷含答案
- 通信移动终端设备装调工发展趋势知识考核试卷含答案
- 平台稳性操作员操作技能强化考核试卷含答案
- 集输工岗前基础理论考核试卷含答案
- 2026年窗口人员服务手势与递接物品礼仪考核题
- 电切削工冲突解决能力考核试卷含答案
- 人力采伐工操作技能评优考核试卷含答案
- 2026年风力发电场高空作业安全知识题库
- 2026年班组安全生产标准化创建要点与验收测试
- GB/T 1149.3-2010内燃机活塞环第3部分:材料规范
- 外科学课件:第七章-重症监测治疗与复苏
- 高三语文课《辨析修改病句》课堂课件优秀课件
- 基坑钢板桩支护计算书计算模板
- 古代汉语诗律的知识
- 付款申请函模板
- GB∕T 8110-2020 熔化极气体保护电弧焊用非合金钢及细晶粒钢实心焊丝
- DB54∕T 0083-2014 青稞生产技术规程 冬青11号
- 3BM2U2 The dog and the cat
- 【精品】东南大学逸夫建筑馆施工组织设计
- 新版部编本四年级语文下册课内阅读专项练习及答案
评论
0/150
提交评论