上传者: sjzdwk
|
上传时间:2022/9/30 20:10:21
|
文件大小:632KB
|
文件类型:-
吉林大学软件学院卓班设计模式第二次练习
练习02创建型+结构型+其它(以fromsrc目录中的代码为基础)1.在game中维护着curMenu,见下图:在运行时,应只有一个curMenu对象。
而MenuMgr作为所有menu的管理器,也可以管理curMenu。
请将curMenu从Game类,移到MenuMgr中,使得运行结果不变。
2.道理同1.请建立MapMgr类,并将curMap从Game类,移到MapMgr中,使得运行结果不变。
3.查看Map.h其中各Block以二维数组的方式组织。
事实上,各Block的组织方式是多种多样的,如既可以用二维数组的方式表示布局结构,也可以用链表、有向图等表示,甚至各Block是通过立体的关系构成Map。
请使用桥接模式分离Map的接口和具体实现。
同时,为保持Map接口的一般性,改为通过线性索引的方式读取/添加Block。
即Map可如下:MapImp类可如下:(当需要不同的实现时,从MapImp派生即可)既然Map不再记录Block的二维位置信息,那么可以让Block记录自己的二维位置信息,即Block类可修改为:请完成相关代码的修改,使得程序功能不变。
4.前边的代码中,地图的布局是由二维数组给出的,如:很明显,其隐含地指出:相邻的两个非空Block是相通的,不相邻两个非空Block是不能直接连通的。
但实际上,地图的布局不一定以数组方式给出,可以用其它方式给出,例如下图(地图B)中的布局,可能以下表的方式给出:(地图B的布局含义)AAAAABBBCCCCDDDAAAAABBB(对应地图B布局实际给出的数据表)类型序号行列LEFTRIGHTUPDOWNA1000206A2011300A3022407A4033500A5044008B6100019B71200310B81400512C92000613C1022011714C1123101200C1224110815D133000916D1432001018D1534001220A1640017130A1741161800A18421719140A1943182000A20441921150B2145202200B2246212300B234722000若希望每个Block“知道”其相邻的各Block,请扩展3中MapDirector、MapBuilder、Block类,同时改写MapMgr中的createMap函数,使得新的程序能够根据给定数据表正确创建并显示地图(可在global.h中添加常量)。
5.回看3中的MapImp类:请问“MapImp类的设计中,使用了适配器模式”,这句话对吗?如果正确,回答适配了什么?采用类适配器模式可以吗?如果不正确,回答为什么?
本软件ID:11892654