我们知道,在许多OO程序语言中,我们可以使用一些访问修饰符来指定对象内部字段的访问范围.
例如,在java中,我们可以使用public,protected或private来指定字段的访问范围,对于此对象的所有调用者.
但我的问题是,我想为不同的呼叫者指定被叫方的不同访问权限.
最重要的一点是:调用者类可以由其他程序员编写,但在我的主程序编写完成后,他们无法通过自己的实现来更改权限.
例如,假设国际象棋游戏程序中至少有3个实体,1个棋盘和2个玩家,我想让黑方球员对棋盘上的所有国际象棋有"读取"权限,但只是"移动"访问权限访问所有黑棋的权利(并且只有在轮到它时才"向右移动"),反之亦然.
我已经有了一些想法如下,但似乎这些想法太复杂而且不理想.
所以有什么好的方法,设计模式或其他什么来处理这个问题?
非常感谢
// ================================================ ===============
我的想法:
1.使用访问密钥类.
创建一个类"访问密钥".
使用"游戏主机"类将"关键"实例分配给不同的玩家.
棋盘类实例具有键右映射表.
每当玩家对棋盘执行"读取"或"移动"动作时,它必须将其键实例作为参数提供给方法,如果权限被拒绝,则抛出异常.
2.使用中介控制器类
棋盘内有一个内部类"板控制器".
2个子类的板控制器,1个可以移动白棋,另一个用于黑棋.
(虽然我可以在这个子类中使用一些if-else来决定是否可以移动一些国际象棋,但我想让其他程序员编写播放器类,并让他们编写他们的AI,所以使用权限判断流程通过这些子类不能直接在播放器类中使用作为我的问题的方法.)
将子板控制器实例分配给不同的播放器.
3.低级方法(丑陋且不理想)
在"移动"或"读取"板类的方法中,检查线程的callstack,知道是调用者属于类"播放器",以及它是哪一侧(黑色或白色).
// ================================================ ===================
任何更好的主意?谢谢