10软工-设计模式.doc_第1页
10软工-设计模式.doc_第2页
10软工-设计模式.doc_第3页
10软工-设计模式.doc_第4页
10软工-设计模式.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

院 系: 计算机科学学院 专 业: 软件工程 年 级: 2010 课程名称: 设计模式 指导教师: 艾勇 组 号: 学 号: 09065084 09065109 姓 名: 赵晓宇 崔伟峰 2013 年 10月25 日年级2010专 业软件工程班级01实验名称设计模式程序设计实验分项内容分项内容1、实验一 创建型模式(Factory模式与Abstract Factory模式)2、实验二 结构型模式(Adapter模式)3、实验三 行为型模式(Observer模式)4、5、6、小 组 成 员姓名学号组内分工自我评分教师评分赵晓宇09065084实验一 实验三5崔伟峰090651095实验二 实验三5小组成绩评定教师签名: 年 月 日实验分项1实验一 创建型模式(Factory模式与Abstract Factory模式)实验目的1、 掌握Factory模式与Abstract Factory模式的意图及其代码实现。2、 了解两种模式的区别。实验要求具体题目用C+或Java语言实现Factory模式与Abstract Factory模式。系统平台VC6.0或以上版本环境下均可实验原理及步骤Factory.h#ifndef FACTORY_H#define FACTORY_H/Productclass Productpublic:Product()virtual Product();/继承自Product的ConcreateProduct子类class ConcreateProduct: public Productpublic:ConcreateProduct();virtual ConcreateProduct();/Creatorclass Creatorpublic:Creator()virtual Creator()void AnOperation();protected:virtual Product* FactoryMethod() = 0;/继承自Creator的ConcreateCreator子类class ConcreateCreator: public Creatorpublic:ConcreateCreator();virtual ConcreateCreator();protected:virtual Product* FactoryMethod();#endif*Factory.cpp#include Factory.h#include using namespace std;ConcreateProduct:ConcreateProduct()std:cout construction of ConcreateProductn;/创建ConcteateProductConcreateProduct:ConcreateProduct()std:cout destruction of ConcreateProductn;/销毁ConcteateProductvoid Creator:AnOperation()Product* p = FactoryMethod();std:cout an operation of productn;ConcreateCreator:ConcreateCreator()std:cout construction of ConcreateCreatorn;ConcreateCreator:ConcreateCreator()std:cout destruction of ConcreateCreatorn;Product* ConcreateCreator:FactoryMethod()return new ConcreateProduct();*Main.cpp#include Factory.h#include int main(int argc,char* argv)Creator *p = new ConcreateCreator();p-AnOperation();delete p;system(pause);return 0;实验结果及分析心得体会软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。Factory模式的作用:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类Abstract Factory模式作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。实验分项2实验二 结构型模式(Adapter模式)实验目的一、掌握Adapter模式的意图及其代码实现实验要求具体题目用C+或Java语言实现Adapter模式系统平台VC6.0以及以上版本均可以实验原理及步骤AbstractFactory.h#ifndef ABSTRACTFACTORY_H#define ABSTRACTFACTORY_H/ 抽象基类AbstractProductA,代表产品A的抽象class AbstractProductApublic:AbstractProductA() virtual AbstractProductA();/ 派生类ConcreateProductA1,继承自AbstractProductA,代表产品A的第一种实现class ConcreateProductA1: public AbstractProductApublic:ConcreateProductA1();virtual ConcreateProductA1();/ 派生类ConcreateProductA2,继承自AbstractProductA,代表产品A的第二种实现class ConcreateProductA2: public AbstractProductApublic:ConcreateProductA2();virtual ConcreateProductA2();/ 抽象基类AbstractProductB,代表产品B的抽象class AbstractProductBpublic:AbstractProductB() virtual AbstractProductB();/ 派生类ConcreateProductB1,继承自AbstractProductB,代表产品B的第一种实现class ConcreateProductB1: public AbstractProductBpublic:ConcreateProductB1();virtual ConcreateProductB1();/ 派生类ConcreateProductB2,继承自AbstractProductB,代表产品B的第二种实现class ConcreateProductB2: public AbstractProductBpublic:ConcreateProductB2();virtual ConcreateProductB2();/ 抽象基类AbstractFactory,工厂的抽象类,生产产品A和产品Bclass AbstractFactorypublic:AbstractFactory()virtual AbstractFactory()virtual AbstractProductA* CreateProductA() = 0;virtual AbstractProductB* CreateProductB() = 0;/ 派生类ConcreateFactory1,继承自AbstractFactory/ 生产产品A和产品B的第一种实现class ConcreateFactory1: public AbstractFactorypublic:ConcreateFactory1();virtual ConcreateFactory1();virtual AbstractProductA* CreateProductA();virtual AbstractProductB* CreateProductB();/ 派生类ConcreateFactory2,继承自AbstractFactory/ 生产产品A和产品B的第二种实现class ConcreateFactory2: public AbstractFactorypublic:ConcreateFactory2();virtual ConcreateFactory2();virtual AbstractProductA* CreateProductA();virtual AbstractProductB* CreateProductB();#endif*AbstractFactory.cpp#include #include AbstractFactory.hConcreateProductA1:ConcreateProductA1()std:cout construction of ConcreateProductA1n;ConcreateProductA1:ConcreateProductA1()std:cout destruction of ConcreateProductA1n;ConcreateProductA2:ConcreateProductA2()std:cout construction of ConcreateProductA2n;ConcreateProductA2:ConcreateProductA2()std:cout destruction of ConcreateProductA2n;ConcreateProductB1:ConcreateProductB1()std:cout construction of ConcreateProductB1n;ConcreateProductB1:ConcreateProductB1()std:cout destruction of ConcreateProductB1n;ConcreateProductB2:ConcreateProductB2()std:cout construction of ConcreateProductB2n;ConcreateProductB2:ConcreateProductB2()std:cout destruction of ConcreateProductB2n;ConcreateFactory1:ConcreateFactory1()std:cout construction of ConcreateFactory1n;ConcreateFactory1:ConcreateFactory1()std:cout destruction of ConcreateFactory1n;AbstractProductA* ConcreateFactory1:CreateProductA()return new ConcreateProductA1();AbstractProductB* ConcreateFactory1:CreateProductB()return new ConcreateProductB1();ConcreateFactory2:ConcreateFactory2()std:cout construction of ConcreateFactory2n;ConcreateFactory2:ConcreateFactory2()std:cout destruction of ConcreateFactory2n;AbstractProductA* ConcreateFactory2:CreateProductA()return new ConcreateProductA2();AbstractProductB* ConcreateFactory2:CreateProductB()return new ConcreateProductB2();*Main.cpp#include AbstractFactory.h#include int main()/ 生产产品A的第一种实现ConcreateFactory1 *pFactory1 = new ConcreateFactory1;AbstractProductA *pProductA = pFactory1-CreateProductA();/ 生产产品B的第二种实现ConcreateFactory2 *pFactory2 = new ConcreateFactory2;AbstractProductB *pProductB = pFactory2-CreateProductB();delete pFactory1;delete pProductA;delete pFactory2;delete pProductB;system(pause);return 0;实验结果及分析心得体会Adapter模式的作用:将一个类的接口转换成客户希望的另外一个接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实验分项3实验三 行为型模式(Observer模式)实验目的一、掌握Observer模式的意图及其代码实现。实验要求具体题目用C+或Java语言实现Observer模式系统平台VC6.0以及以上版本均可以实验原理及步骤Observer.h#ifndef OBSERVER_H#define OBSERVER_H#include typedef int STATE;class Observer;/ Subject 抽象基类,只需要知道Observer基类的声明就可以了class Subjectpublic:Subject() : m_nSubjectState(-1)virtual Subject();void Notify(); / 通知对象改变状态void Attach(Observer *pObserver); / 新增对象void Detach(Observer *pObserver); / 删除对象/ 虚函数,提供默认的实现,派生类可以自己实现来覆盖基类的实现virtual void SetState(STATE nState); / 设置状态virtual STATE GetState(); / 得到状态protected:STATE m_nSubjectState; / 模拟保存Subject状态的变量std:list m_ListObserver; / 保存Observer指针的链表;/ Observer抽象基类class Observerpublic:Observer() : m_nObserverState(-1)virtual Observer()/ 纯虚函数,各个派生类可能有不同的实现/ 通知Observer状态发生了变化virtual void Update(Subject* pSubject) = 0;protected:STATE m_nObserverState; / 模拟保存Observer状态的变量;/ ConcreateSubject类,派生在Subject类class ConcreateSubject: public Subjectpublic:ConcreateSubject() : Subject()virtual ConcreateSubject()/ 派生类自己实现来覆盖基类的实现virtual void SetState(STATE nState); / 设置状态virtual STATE GetState(); / 得到状态;/ ConcreateObserver类派生自Observerclass ConcreateObserver: public Observerpublic:ConcreateObserver() : Observer()virtual ConcreateObserver()/ 虚函数,实现基类提供的接口virtual void Update(Subject* pSubject);#endif*Observer.cpp#include Observer.h#include #include /* -| Subject 类成员函数的实现|-*/void Subject:Attach(Observer *pObserver)std:cout Attach an Observern;m_ListObserver.push_back(pObserver);void Subject:Detach(Observer *pObserver)std:list:iterator iter;iter = std:find(m_ListObserver.begin(), m_ListObserver.end(), pObserver);if (m_ListObserver.end() != iter)m_ListObserver.erase(iter);std:cout Detach an Observern;void Subject:Notify()std:cout Notify Observerss Staten;std:list:iterator iter1, iter2;for (iter1 = m_ListObserver.begin(), iter2 = m_ListObserver.end();iter1 != iter2;+iter1)(*iter1)-Update(this);void Subject:SetState(STATE nState)std:cout SetState By Subjectn;m_nSubjectState = nState;STATE Subject:GetState()std:cout GetState By Subjec

温馨提示

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

评论

0/150

提交评论