见DCI架构。
然后物品的对象在角色身上存在引用,最好是接口的形式
然后在这个物品接口上,加入一些必要的操作物品用方法,比如增加,删除,修改,查询等等。
我的回答是,既不是人物的方法,也不是物品的方法,而是一个同时关联到人物和物品的方法,调用依靠模式匹配找到对应的处理。
如果有场景,这个调用还应加上场景,在prolog中可以直接写为:
Character use Item in Scene
非常简单,没有乱七八糟的耦合,也不用苦思冥想各个对象应该到底如何安排。
也许会有人觉得是退回到了过程式,但实际上不是,过程式不会依靠模式匹配来调用方法。
[该贴被uda1341于2011-04-06 17:02修改过]
面向对象可以以类为边界划分,也可以以功能为划分边界,也可以在设计时分开,运行时合并动态划分边界,这个案例中,套用“人在某个戏中演某个角色,然后执行该角色应有的功能”这个思路,又比如:你在家是儿子,在单位是经理,那么是不是把你孝顺的动作封装在你这个人物类中呢?那么你到单位扮演经理角色时,孝顺这个动作用不到了怎么办呢?
所以,动作其实是和角色有直接关系,而不是和具体人物,但是当作不适合直接封装在角色中,而是通过具体一个场景Context,将人物 角色和动作在这个场景运行时动态合成,编程时,三者都是分开的,这是DCI原理。