一个简单的需求,怎样设计这个框架比较合适?

liunliun 2019-04-05 01:50:10
在一个2000*2000的地图中,每个地块上面都可以建房子,每个地块有相应的操作,每个建筑物也有。
那么我想设计一个mapManager类中含有2000*2000的tileMap类,与此同时在mapmanager中有一个buildingManager类,其中也含有一个list<Building>类

现在有个问题是假设我需要新建某建筑,那么这个函数比如说create(),一定是在buildingmanager中或者在Building类中,同时又需要更改当前地块也就是tileMap的属性,比如说吧土地改成工业用地。
那么问题是如何吧mapmanager的对象传入这个create函数中?我知道可以直接参数传递,但是那样的话就相当于吧父容器的实例传给子实例做参数,是不是不太好?

说简单点,就是mapManager中包含tileMap,包含buildingManager,那么想在buildingmanager的函数create中修改mapmanager的tilemap的属性,要怎么改?直接吧mapmanager作为参数传递进去是不是不好。有没有其他设计的办法

有没有更好的办法设计这两个类?
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liunliun 2019-04-06
  • 打赏
  • 举报
回复
引用 3 楼 张天星 的回复:
几个思路,我先说下你这个类的功能,先确认功能我没有理解错,才能说下一步: 1、mapManager是地图管理。分别有List<tileMap> 和 buildingManager 2、tileMap是地图上的格子。一个格子一个土地。 3、buildingManager是地图类,内部有list<Building>。 4、Building是实际的建筑,可能有建筑金额、建筑等级等等东西?(不知道你要做什么,我假设这是个大富翁游戏) 首先,你这个结构有点儿奇怪,List<tileMap>和list<Building>应该是平级的,甚至应该是同一个类。 比如:List<MapBuilding>,MapBuilding内部分别有tileMap和Building属性。 buildingManager是建筑管理,不知道内部放了什么内容,但就我个人感觉,有针对Building操作的,建议放到Building自身或者放到MapBuilding。 有针对List<Building>的,建议交给mapManager去操作。 结构如下: 1、mapManager:包含List<MapBuilding>,控制2000个格子。 2、MapBuilding 代表单个的格子,内部有tileMap和Building 3、tileMap是土地自身属性,Building是土地上的建筑。 ………… 感觉扯远了,针对你最后的回答说一些个人理解: 1、我知道可以直接参数传递,但是那样的话就相当于吧父容器的实例传给子实例做参数,是不是不太好? 答:肯定不好,如果必须把父容器的实例传递给子对象,那必然是设计上的错误。而如果子对象中某些操作,触发之后一定要调用父对象,那么也是采用事件的方式操作的。 事件是子对象发生了某个事情,然后去通知父对象,如果你Create这个操作一定在子对象中,那么就可以采用事件了。
非常感谢您!解决了我的所有问题,根据您的回答我稍作改动,将building作为一个属性放到了tileMap里面,即每个土地有一个成语是建筑物。再次感谢热心回答!
张天星 2019-04-05
  • 打赏
  • 举报
回复
几个思路,我先说下你这个类的功能,先确认功能我没有理解错,才能说下一步: 1、mapManager是地图管理。分别有List<tileMap> 和 buildingManager 2、tileMap是地图上的格子。一个格子一个土地。 3、buildingManager是地图类,内部有list<Building>。 4、Building是实际的建筑,可能有建筑金额、建筑等级等等东西?(不知道你要做什么,我假设这是个大富翁游戏) 首先,你这个结构有点儿奇怪,List<tileMap>和list<Building>应该是平级的,甚至应该是同一个类。 比如:List<MapBuilding>,MapBuilding内部分别有tileMap和Building属性。 buildingManager是建筑管理,不知道内部放了什么内容,但就我个人感觉,有针对Building操作的,建议放到Building自身或者放到MapBuilding。 有针对List<Building>的,建议交给mapManager去操作。 结构如下: 1、mapManager:包含List<MapBuilding>,控制2000个格子。 2、MapBuilding 代表单个的格子,内部有tileMap和Building 3、tileMap是土地自身属性,Building是土地上的建筑。 ………… 感觉扯远了,针对你最后的回答说一些个人理解: 1、我知道可以直接参数传递,但是那样的话就相当于吧父容器的实例传给子实例做参数,是不是不太好? 答:肯定不好,如果必须把父容器的实例传递给子对象,那必然是设计上的错误。而如果子对象中某些操作,触发之后一定要调用父对象,那么也是采用事件的方式操作的。 事件是子对象发生了某个事情,然后去通知父对象,如果你Create这个操作一定在子对象中,那么就可以采用事件了。
stherix 2019-04-05
  • 打赏
  • 举报
回复
tilemap类里有对拥有者mapmanager的引用就行了

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧