软件构建期末实验_第1页
软件构建期末实验_第2页
软件构建期末实验_第3页
软件构建期末实验_第4页
软件构建期末实验_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

实验报告

课程名称:软件构建

实验6:期末实验OOP设计模式一综合应用

时间:2016年6月7日星期二,第7,8节地点:理工楼

210

学号:120402013037姓名:班级:软件工程1班

一、实验目的

加深对OOP设计模式的理解,提高在实际开发中对于模

式的应用能力。

二、实验内容

到目前为止,我们一共介绍了23种常用的OOP设计模式

(GOF),每一种设计模式都提出了针对一类特定的设计问

题的好的解决方案。对于这些设计模式,你能不能从自己的

实际生活和工作出发,找出一些可以应用这些模式的场合,

对其进行OOP建模呢?现有的各种主流的开发框架和类库

(如MFC,.NETFRAMEWORK,JDK)中也都大量地采用

了这些设计模式,你能不能从中找出几个应用实例,并对其

原理进行简单的说明呢?

此外,在实际的软件项目开发中,我们遇到的问题是复杂的,

依靠单一的模式常常无法满足设计的需要。对于这种情况,

常常需要通过组合应用多种不同的设计模式来实现目标。你

能不能举出一些组合应用设计模式的例子。

提示:对于所举的实例,建议套用《设计模式》书上的模

板,按照“问题一解决方案一评价”格式来加以阐述,即先

说明所面对的设计问题,再给出OOP解决方案(使用各种

UML图以及源码范例),最后评价一下使用该设计模式的效

果O

三、实验环境

Win764位系统

Vc++6.0编译环境

四、实验步骤和结果

1.问题1:

在游戏中,为了节约资源,我们的地图管理,可以采用单

例模式。

2.解决方法1:

1.定义一个Map类使得这个唯一实例是类的一般实例。

单例模式的UML图

_________

MapManager

-mManager:MapManager

-MapManager0

+GetManagerO:MapManager

+ShowQ

2.单例模式的代码实例:

//Game.h:interfacefortheCGameclass.

//

#if!defined(AFX_GAME_H_F32FA2B2_88C1_4046_A

159_902669B6855E_INCLUDEDJ

#define

AFX_GAME_H_F32FA2B2_88C1_4046_A159_902669

B6855E_INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

classMap

public:

virtual-Map(){}

voidShow()

coutvv”地图:召唤师峡谷!”vvendl;

}

staticMap*InstanceQ;

private:

staticMap*map;

Map()

}

};

#endif

//!defined(AFX_GAME_H_F32FA2B2_88C1_4046_A15

9_902669B6855E_INCLUDEDJ

//Game.cpp:implementationoftheCGameclass.

//

#include"stdafx.h"

#include"Game.h"

Map*Map::map=newMap();

Map*Map::lnstance()

if(map==0)

map=newMap();

}

returnmap;

)

#include"stdafx.h"

#include"Game.h"

intmain(intargc,char*argv[])

(

Map*m=Map::lnstance();

m->Show();

Map*m2=Map::lnstance();

m2->Show();

if(m==m2)

cout«m«endl;

cout«m2«endl;

cout«”我们地图使用相同的一个地址!”«endl;

}

return0;

}

3.问题2:

在正常的游戏里,比较常用到的是正常游戏中模式和游戏

死亡模式。

4.解决方法2:

为了解决这两种状态的转换,我们可以采用状态模式,

在一方发生改变了,调用另外一个游戏模式。

状态模式UML类图:

状态模式实例代码:

//Game.h:interfacefortheCGameclass.

//

#if!defined(AFX_GAME_H_F32FA2B2_88C1_4046_A

159_902669B6855E_INCLUDEDJ

#define

AFX_GAME_H_F32FA2B2_88C1_4046_A159_902669

B6855E_INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

classMap

public:

virtual-Map(){}

voidShow()

coutvv”地图:召唤师峡谷!”vvendl;

}

staticMap*lnstance();

private:

staticMap*map;

Map()

}

};

classPlayer;

classState

(

public:

State(){}

virtual-State(){}

virtualvoidstart(Player*p);

};

//正常模式

classNormal:publicState

public:

NormalQ{}

virtual-Normal(){}

virtualvoidstart(Player*p);

};

//死亡模式

classDeath:publicState

(

public:

Death(){}

virtual-Death(){}

virtualvoidstart(Player*p);

};

classPlayer

public:

Player(State*s)

(

this->state=s;

}

virtual-Player(){}

voidstart()

(

cout«”游戏开始"«endl;

this->state->start(this);

}

voidAttack()

coutVV”\t被攻击至|J血量为0!M«endl;

}

voidSetState(State*s)

{

this->state=s;

this->state->start(this);

}

private:

State*state;

);

#endif

//!defined(AFX_GAME_H_F32FA2B2_88C1_4046_A15

9_902669B6855E_INCLUDEDJ

//Game.cpp:implementationoftheCGameclass.

//

#include"stdafx.h"

#include"Game.h"

Map*Map::map=newMap();

Map*Map::lnstance()

if(map==0)

map=newMap();

}

returnmap;

}

voidState::start(Player*p)

cout«"游戏状态"«endl;

}

voidNormal::start(Player*p)

cout«"\t游戏开始攻击敌方«endl;

p->Attack();

p->SetState(newDeath());

}

voidDeath::start(Player*p)

(

cout«"游戏结束"«endl;

}

#include"stdafx.h"

#include"Game.h"

intmain(intargc,char*argv[])

(

Player*game=newPlayer(newNormal());

game->start();

return0;

}

五、实验结果和讨论

1.单例模式的测试:

地图:召唤师峡蜜?

施图:召嗔筛碟容,

00613B28

00613B28

我们地

温馨提示

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

评论

0/150

提交评论