版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大连海事大学软件设计与体系结构课程实验报告(2015-2016学年第一学期)实验四 设计模式应用 班 级: 计算机科学与技术2班 学 号: 2220132451 姓 名: 程子璇 指导教师: 谢兄 成 绩: 2016年 01 月 02日目录1实验目的32实验内容33实验要求34实验步骤35总结与体会125.1实验中出现的问题及其解决方案125.2总结125.3体会121 实验目的1.1 利用Observer、单件等设计模式开发实现一个小的系统。1.2 通过常用的设计模式的实例实验,熟悉设计模式特点及应用条件,掌握基于设计模式的软件系统的设计与开发应用。2 实验内容2.1 用C+语言实现系统。2
2、.2 利用设计模式设计并实现一个简单的图形编辑系统。程序截图3 实验要求(1) 深入复习教材中介绍的各种设计模式。(2) 实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。4 实验步骤4.1采用单件设计模式设计抽象工厂类,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。4.1.1. 类结构图4.1.2. 代码原型namespace gesclass AbstractFactorypublic:AbstractFactory()if (_count = 1)if (_pInstance)delete _pInstance;-_count;protect
3、ed:AbstractFactory() public:virtual Line* CreateProductLine(const int& posX0, const int& posY0,const int& posX1, const int& posY1, const int& id) return nullptr;virtual Symbol* CreateProductSymbol(const int& posX, const int& posY, const int&id) return nullptr; virtual Text* CreateProductText(const i
4、nt& posX, const int& posY, const int&id) return nullptr; virtual Rectangle* CreateProductRectangle(const int& posX0, const int& posY0, const int& posX1, const int& posY1, const int& id) return nullptr; virtual Picture* CreateProductPicture(const int& id)return new Picture(id);public:static AbstractF
5、actory* CreateInstance()if (nullptr = _pInstance)_pInstance = new AbstractFactory();+_count;return _pInstance;protected:staticAbstractFactory*_pInstance;staticint_count;class ConcreteFactory1 : public AbstractFactorypublic:ConcreteFactory1()if (_count = 1)if (_pInstance)delete _pInstance;-_count;pri
6、vate:ConcreteFactory1()public:virtual Line* CreateProductLine(const int& posX0, const int& posY0,const int& posX1, const int& posY1, const int& id) overridereturn new Line1(posX0, posY0, posX1, posY1, id);virtual Symbol* CreateProductSymbol(const int& posX, const int& posY, const int&id) overrideret
7、urn new Symbol1(posX, posY, id);virtual Text* CreateProductText(const int& posX, const int& posY, const int&id) overridereturn new Text1(TEXT(双击输入标注内容), posX, posY, id);virtual Rectangle* CreateProductRectangle(const int& posX0, const int& posY0, const int& posX1, const int& posY1, const int& id) ov
8、erridereturn new Rectangle1(posX0, posY0, posX1, posY1, id);/ Hidden interfacesvirtual Picture* CreateProductPicture(const int& id) override return nullptr; public:static ConcreteFactory1* CreateInstance()if (nullptr = _pInstance)_pInstance = new ConcreteFactory1();+_count;return _pInstance;protecte
9、d:staticConcreteFactory1*_pInstance;staticint_count;class ConcreteFactory2 : public AbstractFactorypublic:ConcreteFactory2()if (_count = 1)if (_pInstance)delete _pInstance;-_count;private:ConcreteFactory2()public:virtual Line* CreateProductLine(const int& posX0, const int& posY0,const int& posX1, co
10、nst int& posY1, const int& id) overridereturn new Line2(TEXT(200), posX0, posY0, posX1, posY1, id);virtual Symbol* CreateProductSymbol(const int& posX, const int& posY, const int&id) overridereturn new Symbol2(TEXT(静61-127C), posX, posY, id);virtual Text* CreateProductText(const int& posX, const int
11、& posY, const int&id) overridereturn new Text2(TEXT(双击输入标注内容), posX, posY, id);virtual Rectangle* CreateProductRectangle(const int& posX0, const int& posY0, const int& posX1, const int& posY1, const int& id) overridereturn new Rectangle2(posX0, posY0, posX1, posY1, id);/ Hidden interfacesvirtual Pic
12、ture* CreateProductPicture(const int& id) override return nullptr; public:static ConcreteFactory2* CreateInstance()if (nullptr = _pInstance)_pInstance = new ConcreteFactory2();+_count;return _pInstance;protected:staticConcreteFactory2*_pInstance;staticint_count; / namespace ges4.1.3. 主函数中的实现代码_pFact
13、ory = AbstractFactory:CreateInstance(); _pFactory = ConcreteFactory2:CreateInstance(); _pFactory = ConcreteFactory1:CreateInstance(); 4.2采用Composite设计模式设计直线、符号、字符串、方框及复合图形,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。4.2.1 类结构图4.2.2. 代码原型namespace gesclass Client;/ forward declaring class Client/ */ class G
14、raphicclass Graphic abstract : public IDedpublic:Graphic(const int& id) : IDed(id)virtual Graphic() ;public:virtual void Draw(Client* pView, const HDC& hdc) const = 0;virtual void Update(Client* pView, const HDC& hdc) const = 0;virtual void Add(Graphic* pGraphicObj) = 0;virtual void Remove(const int
15、& id) = 0;virtual Graphic*GetChild(const int& id) = 0;virtualvoidOnMove(const short& deltaX, const short& deltaY) = 0;public:virtual boolIsHit(const int& x, const int& y) const = 0;virtual intQueryInterface() const = 0;virtual boolSave(HANDLE hFile) const = 0;virtualboolLoad(HANDLE hFile) = 0;/ */ c
16、lass Pictureclass Picture : public Graphicpublic:Picture(const int& id) : Graphic(id), _real(false)Picture()if (_real)for (auto& pObj : _pGraphics)delete pObj;/ Implementationspublic:virtual void Draw(Client* pView, const HDC& hdc) const overridevirtual void Update(Client* pView, const HDC& hdc) con
17、st overridefor (auto& pObj : _pGraphics)pObj-Update(pView, hdc);virtual void Add(Graphic* pGraphicObj) overridefor (auto& pObj : _pGraphics)if (pObj-IDEqual(pGraphicObj-GetID()return;/ Error: Conflict with existing graphic_pGraphics.push_back(pGraphicObj);virtual void Remove(const int& id) overrides
18、td:vector:const_iteratorciter;for (citer = _pGraphics.begin();citer != _pGraphics.end();+citer)if (*citer)-IDEqual(id)delete (*citer);_pGraphics.erase(citer);return;virtual Graphic* GetChild(const int& id) overridefor (auto& pChild : _pGraphics)if (pChild-IDEqual(id)return pChild;return nullptr;virt
19、ualvoid OnMove(const short& deltaX, const short& deltaY) overridefor (auto& pObj : _pGraphics)pObj-OnMove(deltaX, deltaY);virtual bool Save(HANDLE hFile) const overrideDWORDbw = 0;int gt = GT_PICTURE;intgroup = GES_FILE_GROUP_TOUCH;/ Write GT into the file.if (FALSE = WriteFile(hFile, >, sizeof(in
20、t), &bw, nullptr)return false;for (auto& pObj : _pGraphics)/ Write Group-Begin flag into the file.if (FALSE = WriteFile(hFile, &group, sizeof(int), &bw, nullptr)return false;if (false = pObj-Save(hFile)CloseHandle(hFile);return false;return true;virtualbool Load(HANDLE hFile) override;virtual int Qu
21、eryInterface() const overridereturn GT_PICTURE;/ This is a picture class.public:virtual bool IsHit(const int& x, const int& y) const overridefor (auto& pObj : _pGraphics)if (pObj-IsHit(x, y)return true;return false;virtual void GetGraphicsPtrs(std:vector& pGraphics) constpGraphics = _pGraphics;publi
22、c:inlinevoid SetReal(const bool& real) _real = real; private:std:vector_pGraphics;bool_real;namespace gesclass Client;/ forward declaring class Clientclass Symbol abstract : public Graphicpublic:Symbol(const int& id) : Graphic(id)public:virtual void SetText(TCHAR* pText) = 0;public:/ Hid the unused
23、interfacesvirtual void Add(Graphic* pGraphicObj) override ;virtual void Remove(const int& id) override ;virtual Graphic* GetChild(const int& id) override return nullptr; ;public:virtual intQueryInterface() const overridereturn GT_SYMBOL;/ This is a symbol class.;class Line abstract : public Graphicp
24、ublic:Line(const int& id) : Graphic(id)public:virtual void SetStartPos(const int& posX, const int& posY) = 0;virtual void SetEndPos(const int& posX, const int& posY) = 0;virtual void SetText(TCHAR* pText) = 0;public:virtual bool IsPossibleToViewThis() const = 0;public:/ Hid the unused interfacesvirt
25、ual void Add(Graphic* pGraphicObj) override ;virtual void Remove(const int& id) override ;virtual Graphic* GetChild(const int& id) override return nullptr; ;public:virtual int QueryInterface() const overridereturn GT_LINE;/ This is a line class.;class Text abstract : public Graphicpublic:Text(const
26、int& id) : Graphic(id)public:virtual void SetFontSize(const int& fontSize) = 0;virtual void SetText(TCHAR* pText) = 0;public:/ Hid the unused interfacesvirtual void Add(Graphic* pGraphicObj) override ;virtual void Remove(const int& id) override ;virtual Graphic* GetChild(const int& id) override retu
27、rn nullptr; ;public:virtual int QueryInterface() const overridereturn GT_TEXT;/ This is a text class.;class Rectangle abstract : public Graphicpublic:Rectangle(const int& id) : Graphic(id)public:virtual void SetStartPos(const int& posX, const int& posY) = 0;virtual void SetEndPos(const int& posX, co
28、nst int& posY) = 0;virtual bool IsPossibleToViewThis() const = 0;public:/ Hid the unused interfacesvirtual void Add(Graphic* pGraphicObj) override ;virtual void Remove(const int& id) override ;virtual Graphic* GetChild(const int& id) override return nullptr; ;public:virtual int QueryInterface() cons
29、t overridereturn GT_RECTANGLE;/ This is a rectangle class.;class Line1 : public Linepublic:Line1(const int& posX0, const int& posY0,const int& posX1, const int& posY1, const int& id);Line1();public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(
30、Client* pView, const HDC& hdc) const override;virtualvoid OnMove(const short& deltaX, const short& deltaY) override;virtual bool IsHit(const int& x, const int& y) const override;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;public:virtual void SetStartPos(con
31、st int& posX, const int& posY) override;virtual void SetEndPos(const int& posX, const int& posY) override;virtual void SetText(TCHAR* pText) override virtual bool IsPossibleToViewThis() const override;virtual int QueryInterface() const overridereturn (GT_LINE| GT_LINE1);/ This is a line1 class.priva
32、te:int_posX0;int_posY0;int_posX1;int_posY1;class Line2 : public Linepublic:Line2(TCHAR* pText, const int& posX0, const int& posY0,const int& posX1, const int& posY1, const int& id);Line2();public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(Cl
33、ient* pView, const HDC& hdc) const override;virtualvoid OnMove(const short& deltaX, const short& deltaY) override;virtual bool IsHit(const int& x, const int& y) const override;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;public:virtual void SetStartPos(const
34、 int& posX, const int& posY) override;virtual void SetEndPos(const int& posX, const int& posY) override;virtual void SetText(TCHAR* pText) override;virtual bool IsPossibleToViewThis() const override;virtual intQueryInterface() const overridereturn (GT_LINE | GT_LINE2);/ This is a line2 class.private
35、:int_posX0;int_posY0;int_posX1;int_posY1;public:TCHAR*_pText;class Text1 : public Textpublic:Text1(TCHAR* pText, const int& posX, const int& posY, const int& id);Text1();public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(Client* pView, const
36、HDC& hdc) const override;virtualvoid OnMove(const short& deltaX, const short& deltaY) override;virtual bool IsHit(const int& x, const int& y) const override;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;virtual int QueryInterface() const overridereturn (GT_TE
37、XT | GT_TEXT1);/ This is a text1 class.public:virtual void SetFontSize(const int& fontSize) override;virtual void SetText(TCHAR* pText) override;private:int_posX;int_posY;int_font_size;TCHAR*_pText;HFONT_hFont;class Text2 : public Textpublic:Text2(TCHAR* pText, const int& posX, const int& posY, cons
38、t int& id);Text2();public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(Client* pView, const HDC& hdc) const override;virtualvoid OnMove(const short& deltaX, const short& deltaY) override;virtual bool IsHit(const int& x, const int& y) const ove
39、rride;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;virtual intQueryInterface() const overridereturn (GT_TEXT | GT_TEXT2);/ This is a text2 class.public:virtual void SetFontSize(const int& fontSize) override;virtual void SetText(TCHAR* pText) override;private
40、:int_posX;int_posY;int_font_size;TCHAR*_pText;HFONT_hFont;class Rectangle1 : public Rectanglepublic:Rectangle1(const int& posX0, const int& posY0,const int& posX1, const int& posY1, const int& id);Rectangle1();public:virtual void SetStartPos(const int& posX, const int& posY) override;virtual void Se
41、tEndPos(const int& posX, const int& posY) override;public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(Client* pView, const HDC& hdc) const override;virtualvoid OnMove(const short& deltaX, const short& deltaY) override;virtual bool IsHit(const
42、 int& x, const int& y) const override;virtual bool IsPossibleToViewThis() const override;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;virtual intQueryInterface() const overridereturn (GT_RECTANGLE | GT_RECTANGLE1);/ This is a rectangle1 class.private:int_pos
43、X0;int_posY0;int_posX1;int_posY1;class Rectangle2 : public Rectanglepublic:Rectangle2(const int& posX0, const int& posY0,const int& posX1, const int& posY1, const int& id);Rectangle2();public:virtual void SetStartPos(const int& posX, const int& posY) override;virtual void SetEndPos(const int& posX,
44、const int& posY) override;public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(Client* pView, const HDC& hdc) const override;virtualvoid OnMove(const short& deltaX, const short& deltaY) override;virtual bool IsHit(const int& x, const int& y) co
45、nst override;virtual bool IsPossibleToViewThis() const override;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;virtual intQueryInterface() const overridereturn (GT_RECTANGLE | GT_RECTANGLE2);/ This is a rectangle2 class.private:int_posX0;int_posY0;int_posX1;in
46、t_posY1;class Symbol1 : public Symbolpublic:Symbol1(const int& posX, const int& posY, const int& id);Symbol1();public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(Client* pView, const HDC& hdc) const override;virtualvoid OnMove(const short& de
47、ltaX, const short& deltaY) override;virtual bool IsHit(const int& x, const int& y) const override;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;virtual intQueryInterface() const overridereturn (GT_SYMBOL | GT_SYMBOL1);/ This is a symbol1 class.public:virtual
48、void SetText(TCHAR* pText) override private:int_posX;int_posY;float_size;class Symbol2 : public Symbolpublic:Symbol2(TCHAR* pText, const int& posX, const int& posY, const int& id);Symbol2();public:/ Implementations:virtual void Draw(Client* pView, const HDC& hdc) const override;virtual void Update(C
49、lient* pView, const HDC& hdc) const override;virtualvoid OnMove(const short& deltaX, const short& deltaY) override;virtual bool IsHit(const int& x, const int& y) const override;virtual bool Save(HANDLE hFile) const override;virtualbool Load(HANDLE hFile) override;virtual intQueryInterface() const overridereturn (GT_SYMBOL | GT_SYMBOL2);/ This is a symbol2 class.public:virtual voidSetText(TCHAR* pText) override;private:int_posX;int_posY;float_size;TCHAR*_pText;/ namespace ges4.2.3. 主函数中的实现代码void ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 康复护理中的康复政策与法规
- 臀部挫伤的疼痛缓解技巧
- 2026届云南省玉溪市江川区第二中学高三模拟考试化学试题试卷含解析
- 2026年河南获嘉农村商业银行人员招聘考试备考试题及答案详解
- 2026年中信银行(浦东分行 )人员招聘笔试参考题库及答案详解
- 2026年黑龙江省医院道外分院医护人员招聘考试备考题库及答案详解
- 2026年华夏银行(丽水分行)人员招聘笔试参考题库及答案详解
- 2026年河南宜阳农村商业银行人员招聘考试备考题库及答案详解
- 2026年民生银行(哈尔滨分行)人员招聘笔试备考试题及答案详解
- 2026年贵州银行人员招聘笔试参考试题及答案详解
- 安徽2023年高考文综历史试卷及参考答案
- 新药研发毒理学安全性评价
- 2022北京西城区初二地理一模试卷及答案
- 抗真菌药物课件
- 2023年潍坊市初中学业水平考试地理试题附答案
- 2022年上海市初中学业考试地理中考试卷真题(含答案详解)
- 皮影教学反思
- YY/T 1511-2017胶原蛋白海绵
- GB/T 7631.2-2003润滑剂、工业用油和相关产品(L类)的分类第2部分:H组(液压系统)
- 船舶吃水差解析课件
- 乙醇-水精馏浮阀塔设计化工原理课程设计
评论
0/150
提交评论