软件构建期末实验.docx

上传人:b****1 文档编号:1963950 上传时间:2023-05-02 格式:DOCX 页数:15 大小:42.93KB
下载 相关 举报
软件构建期末实验.docx_第1页
第1页 / 共15页
软件构建期末实验.docx_第2页
第2页 / 共15页
软件构建期末实验.docx_第3页
第3页 / 共15页
软件构建期末实验.docx_第4页
第4页 / 共15页
软件构建期末实验.docx_第5页
第5页 / 共15页
软件构建期末实验.docx_第6页
第6页 / 共15页
软件构建期末实验.docx_第7页
第7页 / 共15页
软件构建期末实验.docx_第8页
第8页 / 共15页
软件构建期末实验.docx_第9页
第9页 / 共15页
软件构建期末实验.docx_第10页
第10页 / 共15页
软件构建期末实验.docx_第11页
第11页 / 共15页
软件构建期末实验.docx_第12页
第12页 / 共15页
软件构建期末实验.docx_第13页
第13页 / 共15页
软件构建期末实验.docx_第14页
第14页 / 共15页
软件构建期末实验.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

软件构建期末实验.docx

《软件构建期末实验.docx》由会员分享,可在线阅读,更多相关《软件构建期末实验.docx(15页珍藏版)》请在冰点文库上搜索。

软件构建期末实验.docx

软件构建期末实验

实验报告

课程名称:

软件构建

实验6:

期末实验OOP设计模式—综合应用

时间:

2016年6月7日星期二,第7,8节地点:

理工楼210

学号:

120402013037姓名:

班级:

软件工程1班

一、实验目的

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

二、实验内容

到目前为止,我们一共介绍了23种常用的OOP设计模式(GOF),每一种设计模式都提出了针对一类特定的设计问题的好的解决方案。

对于这些设计模式,你能不能从自己的实际生活和工作出发,找出一些可以应用这些模式的场合,对其进行OOP建模呢?

现有的各种主流的开发框架和类库(如MFC,.NETFRAMEWORK,JDK)中也都大量地采用了这些设计模式,你能不能从中找出几个应用实例,并对其原理进行简单的说明呢?

此外,在实际的软件项目开发中,我们遇到的问题是复杂的,依靠单一的模式常常无法满足设计的需要。

对于这种情况,常常需要通过组合应用多种不同的设计模式来实现目标。

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

提示:

对于所举的实例,建议套用《设计模式》书上的模板,按照“问题-解决方案-评价”格式来加以阐述,即先说明所面对的设计问题,再给出OOP解决方案(使用各种UML图以及源码范例),最后评价一下使用该设计模式的效果。

三、实验环境

Win764位系统

Vc++6.0编译环境

四、实验步骤和结果

1.问题1:

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

2.解决方法1:

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

单例模式的UML图

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

//Game.h:

interfacefortheCGameclass.

//

#if!

defined(AFX_GAME_H__F32FA2B2_88C1_4046_A159_902669B6855E__INCLUDED_)

#defineAFX_GAME_H__F32FA2B2_88C1_4046_A159_902669B6855E__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

classMap

{

public:

virtual~Map(){}

voidShow()

{

cout<<"地图:

召唤师峡谷!

"<

}

staticMap*Instance();

private:

staticMap*map;

Map()

{

}

};

#endif//!

defined(AFX_GAME_H__F32FA2B2_88C1_4046_A159_902669B6855E__INCLUDED_)

//Game.cpp:

implementationoftheCGameclass.

//

#include"stdafx.h"

#include"Game.h"

Map*Map:

:

map=newMap();

Map*Map:

:

Instance()

{

if(map==0)

{

map=newMap();

}

returnmap;

}

#include"stdafx.h"

#include"Game.h"

intmain(intargc,char*argv[])

{

Map*m=Map:

:

Instance();

m->Show();

Map*m2=Map:

:

Instance();

m2->Show();

if(m==m2)

{

cout<

cout<

cout<<"我们地图使用相同的一个地址!

"<

}

return0;

}

3.问题2:

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

4.解决方法2:

为了解决这两种状态的转换,我们可以采用状态模式,在一方发生改变了,调用另外一个游戏模式。

状态模式UML类图:

状态模式实例代码:

//Game.h:

interfacefortheCGameclass.

//

#if!

defined(AFX_GAME_H__F32FA2B2_88C1_4046_A159_902669B6855E__INCLUDED_)

#defineAFX_GAME_H__F32FA2B2_88C1_4046_A159_902669B6855E__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

classMap

{

public:

virtual~Map(){}

voidShow()

{

cout<<"地图:

召唤师峡谷!

"<

}

staticMap*Instance();

private:

staticMap*map;

Map()

{

}

};

classPlayer;

classState

{

public:

State(){}

virtual~State(){}

virtualvoidstart(Player*p);

};

//正常模式

classNormal:

publicState

{

public:

Normal(){}

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<<"游戏开始"<

this->state->start(this);

}

voidAttack()

{

cout<<"\t被攻击到血量为0!

"<

}

voidSetState(State*s)

{

this->state=s;

this->state->start(this);

}

private:

State*state;

};

#endif//!

defined(AFX_GAME_H__F32FA2B2_88C1_4046_A159_902669B6855E__INCLUDED_)

//Game.cpp:

implementationoftheCGameclass.

//

#include"stdafx.h"

#include"Game.h"

Map*Map:

:

map=newMap();

Map*Map:

:

Instance()

{

if(map==0)

{

map=newMap();

}

returnmap;

}

voidState:

:

start(Player*p)

{

cout<<"游戏状态"<

}

voidNormal:

:

start(Player*p)

{

cout<<"\t游戏开始攻击敌方~"<

p->Attack();

p->SetState(newDeath());

}

voidDeath:

:

start(Player*p)

{

cout<<"游戏结束"<

}

#include"stdafx.h"

#include"Game.h"

intmain(intargc,char*argv[])

{

Player*game=newPlayer(newNormal());

game->start();

return0;

}

五、实验结果和讨论

1.单例模式的测试:

2.状态模式的测试:

六、总结

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2