2010-03-03 93 views
1

因此,這裏是我的問題:專用接口或抽象類:什麼是我的選擇

我用在我的項目的一些接口,以幫助保持良好的編碼風格,但是,我的軟件設計建議我可能能夠將其導出爲我和其他人可以使用的庫。

問題在於可訪問性。在我的一些接口中,我不希望別人訪問這些方法,但是Java強制它們公開。這在我自己的項目中是可以的,但我不希望其他人能夠訪問這些方法。

例如,我已經叫一個接口雪碧一些方法如下

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); 
... 

這是一件好事,因爲所有的精靈需要這些方法,但他們中的一些,如抽獎()我只希望我的遊戲引擎使用。

我有什麼選擇?

+0

專用接口是沒有意義的,接口用於通信的API。因此編譯器拒絕它。 – 2010-03-03 15:29:59

回答

4

我會說,縮小界面Spirte並將您想要的方法private移動到AbstractSprite子類。這是最簡單的方法。

0

抽象類應該是罰款,如果:

  • 可以有一些共同的實現(即使它是一個非常簡單的像一些屬性)
  • 你必須定義這些保護方法
  • 和你的東西是對象(is-a relationship)的同類。你說的是「我所有的精靈」,所以你在說:「所有的都是一些子類型的精靈」。

因此......就你而言,抽象類似乎很適合。

不要害怕。如果你需要接口,你也可以稍後定義它們(甚至是抽象類實現一個方法子集的接口)。

或者如果您需要更改,您可以重構。

0

怎麼樣創建(或多個)Facade

如果你有更大的類/接口在你的庫中一起播放,那麼Facade提供了一個受控的「界面」給外部世界。更具體地說,對於你的Sprite,你可以將你的界面分成兩個界面:一個通過你的Facade可用於外界,但不包括draw()之類的界面。而像你的內部使用DrawableSprite。那麼你的內部對象當然會實現這兩個接口。

0

Java允許4級訪問私有,受保護,公共和默認。 (默認是沒有關鍵字)果殼中的Java將其稱爲默認Sun java tutorial也說包私有

默認允許從同一包中的類訪問。

所以在這種情況下,只有你應該訪問的接口是默認的,所以不能從你的包外看到。

對於雪碧,你需要分成2個接口 公共雪碧含有外部代碼可以使用的。 默認只對遊戲引擎

的您爲通過遊戲引擎的使用可以擴展兩個接口對象,

相關問題