所以这是我的问题:
我在项目中使用了许多接口来帮助维护良好的编码风格,但是,我的软件设计表明我可以将其导出为我和其他人可以使用的库。
问题在于可访问性。在我的一些接口中,我不希望其他人访问这些方法,但Java强制它们是公开的。这在我自己的项目中没问题,但我不希望其他人能够访问这些方法。
例如,我有一个名为Sprite的接口,其中包含以下一些方法
Sprite:
void update(Room room);
void draw(Room world, Canvas c);
void updateHealth();
void updateLocation(Room room);
int getLayer();
void shoot();
void setDirection(Direction direction);
...
这很好,因为所有精灵都需要这些方法,但其中一些如draw()我只想让我的游戏引擎使用。
我有什么选择?
答案 0 :(得分:4)
我想说,缩小Spirte
的界面并将您想要成为private
的方法移动到AbstractSprite
子类。这是最简单的方法。
答案 1 :(得分:0)
如果出现以下情况,抽象类应该没有问题:
所以......在你的情况下,似乎抽象类很适合。
不要害怕。如果您需要接口,您也可以稍后定义它们(甚至抽象类实现具有方法子集的接口)。
或者,如果您需要更改,您可以重构。
答案 2 :(得分:0)
如何创建(或多个)Facade?
如果你的库中有更多的类/接口在一起播放,那么Facade可以为外界提供一个受控的“界面”。更具体地说,对于您的Sprite,您可以将界面划分为两个界面:一个通过Facade可供外界使用,但不包括draw()
之类的界面。对于您的内部使用,类似于DrawableSprite
。那么你的内部对象当然会实现这两个接口。
答案 3 :(得分:0)
Java允许4级访问私有,受保护,公共和默认。 (默认是没有关键字)Nutshell中的Java调用它默认Sun java tutorial也说包私有
默认允许从同一个包中的类进行访问。
因此,在这种情况下,只有您应该访问的界面才是默认的,因此无法从包外看到。
对于Sprite,您需要拆分为2个接口 包含外部代码可以使用的公共Sprite。 仅限游戏引擎的默认值
您为Game Engine使用的对象可以扩展两个接口,