我製作了一個接口,其中包含了玩家應該擁有的所有常用方法。我在我的代碼中實現了它,也是我的同事。但許多開發人員不知道我的界面是否創建了像playMyPlayer()等自己的方法。如何強制程序員實現接口
我該如何強制其他程序員實現我的界面?
我製作了一個接口,其中包含了玩家應該擁有的所有常用方法。我在我的代碼中實現了它,也是我的同事。但許多開發人員不知道我的界面是否創建了像playMyPlayer()等自己的方法。如何強制程序員實現接口
我該如何強制其他程序員實現我的界面?
用自己的情景地名釋義:
接口
interface Player{
public void play();
public void pause();
public void stop();
}
類正在實施Player
Intreface;
class AudioPlayer implements Player{...}
class VideoPlayer implements Player{...}
一些額外的類。無意義但似乎相關
Class PlayList{}
一個枚舉誰扮演重要角色;
enum MEDIAPLAYER {
AUDIO,VIDEO;
public Player getPlayer() {
switch (this) {
case AUDIO:
return new AudioPlayer();
case VIDEO:
return new VideoPlayer();
default:
return new AudioPlayer();
}
}
}
使用你的代碼
Player testPlayer = MEDIAPLAYER.getPlayer();
:
testPlayer.play();
現在,如果添加任何新的播放器,它的進入會去MEDIAPLAYER
這是返回Player
類型的對象。所以每個人都必須實現Player
另一種方法:
你可以創建一個抽象類,說MasterPlayer
,誰是有所有的抽象方法Player
接口有。另外,MasterPlayer
會有一些額外的方法,如管理PlayList
謝謝!這正是我想要的......非常感謝。它是一些設計模式還是僅僅是針對特定問題的解決方案? – noquery
按照您的第二種方法,我可以將Player界面轉換爲MasterPlayer抽象類。這樣做有沒有優勢?哪種方法更好? – noquery
對於第二種情況,您可以簡單地使用'Player'來引用各種玩家,例如'VideoPlayer'和'AudioPlayer',但調用任何抽象/虛擬成員將調用真實類的成員。至於遊戲,你可以做一個基類「GameObject」 - 然後把所有類型的遊戲對象放入一個列表並迭代它,更新所有的遊戲對象,而不需要任何switch語句或其他。 – Mario
您確定了自己的主要問題,並不是說這些開發人員選擇不使用您的界面,他們也不知道它存在。
我認爲這裏最重要的是實現一個系統,告知開發者他們可以訪問哪些代碼以及一個wiki或其他知識庫,以便他們可以搜索他們需要的內容。
一旦你有一個系統通知你的開發者接口/代碼示例/任何他們有可用的東西,這將是更容易確保他們使用它。平心而論,如果您提供的代碼寫得很好,並且支持他們需要的功能,那麼大多數開發人員無論如何都會使用它,因爲它可以節省工作量。
然而,你應該在你的編碼標準/行爲準則中加入一些關於重用現有代碼而不是重寫的內容,但是你不能這樣做,直到你有一個可靠的系統來通知開發者他們可以使用哪些代碼。
做到這一點的唯一方法是創建一個需要實現的接口對象實例的有用類:
public class UsefulClass {
public void DoSomethingIrresistable(IPlayer player) {
// ... implementation here
}
}
任何想要的東西必須找到或創建一個實現IPlayer
類。
否則,爲什麼有人會首先實現接口?您可以創建接口來保證某些類成員存在,而不是強迫人們按照您認爲應該設計的方式來組織他們的類。
這就和我上面評論的一樣。當我們不讓其他重要方法的名稱更改時,我們需要使用反射來調用這些方法,而無需進行額外的更改。建議如果在你的腦海裏有更多的方法 – noquery
與他們交談?沒有必要強迫他們,如果他們沒有使用你的接口的唯一原因是因爲他們不知道它在那裏... – bdares
...如果你不得不強迫他們,你有更大的問題,而不是分歧的接口使用。 – delnan
如果你有一些方法正在接受這個接口類型的參數,他們怎麼沒有實現它。他們怎麼才能讓它工作呢? –