0

我正在开发MineSweeper。在那我有3个包裹。1.frontEnd 2.backEnd 3.mineSweeperControl。

mineSweeperControl包含一个实现 ActionListener的类 ActionSplicer 。在前端我有一个 JBUTTONS 数组和一个ActionSplicer对象数组,这样splicerobj[i][j] 监听按钮 [i][j]。(一对一对应)

backEnd包含一个对象数组,这样object[i][j] 具有 button[i][j] 的背景细节,例如 MineValue、isCellEmpty、isCellFlagged 等...

方法doBackgroundAction(i,j){..}类 BackEndManager中定义。在ActionSplicer的actionPerformed中,我调用doBackgroundAction(i,j)以便前景的任何变化也会影响背景。

我的问题在哪里?

doBackGroundAction (i,j)需要公开,因为它在不同的包中调用。

但我不希望任何方法公开,因为它可能会降低灵活性,然后任何人都可以更改属性的值。

我无法扩展 BackEndManager 类,因为我在前端创建了一组 ActionSplicer 对象。

因此,我需要一些关于声明 doBackGroundAction(i,j) 的指导。在某些不可避免的情况下将方法声明为公共是否是正确的方法?或者如何更改我的设计以保留具有默认可见性的方法。

4

1 回答 1

0

为了不将该方法公开,您可以使用以下内容:

public class BackEndManager {
    protected void doBackgroundAction(int i, int j) { ... }
}

然后,每当您需要该方法时,创建一个 BackEndManager 的子类(因为 protected 允许子类访问该方法):

public class BackEndManagerSubclass extends BackEndManager {
    public void doBackgroundActionNew(int i, int j) {
        doBackgroundAction(i, j);
    }
}

这使初始类保持完整,并允许您通过“隐藏”类的真实内部的子类公开一个新方法BackEndManager

编辑:我刚刚看到这一行:“我无法扩展 BackGroundManager 类,因为我在前端创建了一组 ActionSplicer 对象。”

如果BackGroundManager你的意思是BackEndManager我的想法是没有用的。您能否更清楚地说明这一点?据我了解ActionSplicer是在包装中mineSweeperControl,并且frontEnd是另一个包装,所以有什么联系BackEndManager

于 2011-11-25T09:09:21.150 回答