gpt4 book ai didi

java - 处理对象字段访问控制的设计模式或方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:37 25 4
gpt4 key购买 nike

我们知道,在许多面向对象的程序语言中,我们可以使用一些访问修饰符来指定对象内部字段的访问范围。

例如在java中我们可以使用public,protected或者private来指定一个字段的访问范围,对于这个对象的所有调用者。

但我的问题是,我想为不同的调用者指定被调用者的不同访问权限。

最重要的一点是:调用者类可以由其他程序员编写,但在我的主程序编写后,他们无法通过自己的实现更改权限。

例如,假设国际象棋游戏程序中至少有 3 个实体,1 个棋盘和 2 个玩家,我想让黑方玩家拥有对棋盘上所有棋子的“读取”权限,但只是“移动”访问所有黑棋的访问权,(并且只有轮到他时才有“移动”权),反之亦然。

我已经有了下面的一些想法,但是这些想法似乎太复杂了,不太理想。

那么有什么好的方法、设计模式或其他方法来处理这个问题吗?

非常感谢

//=========================================== ==================

我的想法:

1.使用访问 key 类。

  • 创建一个类“访问 key ”。
  • 使用“游戏主机”类将“ key ”实例分配给不同的玩家。
  • 棋盘类实例有一个键-右映射表。
  • 每次玩家向板,它必须将它们的关键实例作为方法的参数,如果权限被拒绝,则抛出异常。

2.使用中间 Controller 类

  • 棋盘内部有一个内部类“boardcontroller”。
  • 2个boardcontroller的子类,1个可以移动白棋,另一个可以移动黑棋。

(虽然我可以在这个子类中使用一些 if-else 来决定它是否可以移动一些国际象棋,但我想让玩家类由其他程序员编写,并让他们编写他们的 AI,所以这些子类使用的权限判断流程不能直接在播放器类中作为我的问题的方法。)

  • 将子板 Controller 实例分配给不同的玩家。

3.低级方法(丑陋且不理想)

在棋盘类的“move”或“read”方法中,检查线程的调用堆栈,了解调用者是否属于“player”类,以及它是哪一侧(黑色或白色)。

//=========================================== ======================

有更好的主意吗?谢谢你

最佳答案

代理就是你所需要的。

这种设计模式是控制对特定对象的访问,可以控制它们的创建或任何事情。

最好的部分是客户不知道他正在使用代理。唯一的部分是,如果客户端调用它无法访问的方法,您可以抛出一些异常。在这种情况下,您必须为每个此类方法修改类接口(interface)以抛出异常,实际实现不会这样做,但为了代理,这是一个很好的解决方案。

Reference

关于java - 处理对象字段访问控制的设计模式或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com