是否有这样的设计模式:隐藏某些类的某些方法

时间:2010-10-05 21:36:41

标签: python design-patterns oop

我正在用Python编写一个骰子游戏模拟,并试图找到以面向对象的方式处理以下情况的最佳方法。

我有一个Dice类来处理掷骰子和报告骰子的事情。此类的方法包括修改骰子值的roll()方法,以及描述骰子状态的各种报告方法,例如have_n_of_a_kind()is_scoring_combination()get_roll_value()

有两个类使用这个Dice类。由人类直接控制的玩家不受信任,总是采取合法行动。还有一个Turn类,它强制执行游戏规则。

那么,Player和Turn类都需要能够通过调用描述方法的状态向Dice询问其值,但是不允许Player直接调用roll()方法,因为人类播放器可能会在不应该播放时滚动。

我是否有一个好方法允许Turn类调用Dice对象的roll()方法,但不允许玩家这样做?

1 个答案:

答案 0 :(得分:1)

Player通过调用例如Turnturn.roll_dice()滚动Turn。然后,roll可以决定是NotYourTurnError骰子还是提出Player

您无法阻止die.roll()班级直接拨打roll,但您可以通过重命名__roll使die成为私有。但是,由于我假设播放器通过某种(G?)UI控制die,因此您无法在所述界面中包含告诉roll_foo的任何方式。

一般情况下,你不能在任何程度的安全性下隐藏任意Python代码这样的方法; Python非常强大,几乎可以肯定能够找到解决方案。相反,您将它们设为受保护(__foo)或私有({{1}}),并假设打电话给他们的人知道他们在做什么。