欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    郭新乐软件设计与体系结构-实验4.doc

    • 资源ID:24149409       资源大小:221KB        全文页数:29页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    郭新乐软件设计与体系结构-实验4.doc

    【精品文档】如有侵权,请联系网站删除,仅供学习与交流郭新乐软件设计与体系结构-实验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.1 用C+语言实现系统。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;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 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& id)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 = 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& 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 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 ConcreteFactory1();+_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 int& 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 Text* 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, 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;staticint_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;/ 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* pGraphicObj) = 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 = 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 Update(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);virtual void Remove(const int& id) overridestd:vector<ges:Graphic*>: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;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 (FALSE = WriteFile(hFile, &gt, 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 Load(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<Graphic*>& pGraphics) constpGraphics = _pGraphics;public:inlinevoid SetReal(const bool& real) _real = real; private:std:vector<Graphic*>_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 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 Graphicpublic: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 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() const overridereturn GT_LINE;/ This is a line class.class Text abstract : public Graphicpublic:Text(const 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 return 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, const 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() const 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(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(const 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.private: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(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(const 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: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 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_TEXT | 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, const 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 override;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: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 SetEndPos(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 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_posX0;int_posY0;int_posX1;int_posY1;class Rectangle2 : public Rectanglepublic:Rectangle2(const int& posX0, const int&

    注意事项

    本文(郭新乐软件设计与体系结构-实验4.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开