郭新乐软件设计与体系结构-实验4.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《郭新乐软件设计与体系结构-实验4.doc》由会员分享,可在线阅读,更多相关《郭新乐软件设计与体系结构-实验4.doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流郭新乐软件设计与体系结构-实验4.精品文档.大连海事大学软件设计与体系结构课程实验报告(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 实验内容2.1 用C+语言实现系统。2.2 利用设计模式设计并实现一个简单的图形编辑系统。程序截图3 实验要求(1) 深入复习教材中介绍的各种设计模式。(2) 实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。4 实验步骤4.1采用单件设计模式设计抽象工厂类,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。4.1.1. 类结构图4.1.2. 代码原型namespace gesclass AbstractFactorypublic:AbstractFactory()if (_count = 1)
3、if (_pInstance)delete _pInstance;-_count;protected: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
4、nullptr; virtual Text* CreateProductText(const int& 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& i
5、d)return new Picture(id);public:static AbstractFactory* CreateInstance()if (nullptr = _pInstance)_pInstance = new AbstractFactory();+_count;return _pInstance;protected:staticAbstractFactory*_pInstance;staticint_count;class ConcreteFactory1 : public AbstractFactorypublic:ConcreteFactory1()if (_count
6、= 1)if (_pInstance)delete _pInstance;-_count;private: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&
7、posX, const int& posY, const int&id) overridereturn 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
8、 int& posX1, const int& posY1, const int& id) overridereturn 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 Concr
9、eteFactory1();+_count;return _pInstance;protected:staticConcreteFactory1*_pInstance;staticint_count;class ConcreteFactory2 : public AbstractFactorypublic:ConcreteFactory2()if (_count = 1)if (_pInstance)delete _pInstance;-_count;private:ConcreteFactory2()public:virtual Line* CreateProductLine(const i
10、nt& posX0, const int& posY0,const int& posX1, const 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 Te
11、xt* CreateProductText(const int& posX, const int& 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,
12、posX1, posY1, id);/ Hidden interfacesvirtual Picture* CreateProductPicture(const int& id) override return nullptr; public:static ConcreteFactory2* CreateInstance()if (nullptr = _pInstance)_pInstance = new ConcreteFactory2();+_count;return _pInstance;protected:staticConcreteFactory2*_pInstance;static
13、int_count; / namespace ges4.1.3. 主函数中的实现代码_pFactory = AbstractFactory:CreateInstance();_pFactory = ConcreteFactory2:CreateInstance();_pFactory = ConcreteFactory1:CreateInstance();4.2采用Composite设计模式设计直线、符号、字符串、方框及复合图形,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。4.2.1 类结构图4.2.2. 代码原型namespace gesclass Client
14、;/ forward declaring class Client/ class Graphicclass 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* pGra
15、phicObj) = 0;virtual void Remove(const int& 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 =
16、0;virtualboolLoad(HANDLE hFile) = 0;/ class 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 Up
17、date(Client* pView, const HDC& hdc) const 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);virtu
18、al void Remove(const int& id) overridestd: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-IDEqu
19、al(id)return pChild;return nullptr;virtualvoid 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 (
20、FALSE = WriteFile(hFile, >, sizeof(int), &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 Loa
21、d(HANDLE hFile) override;virtual int QueryInterface() 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& pGrap
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新乐 软件设计 体系结构 实验
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内