2011-10-25 15 views
1

私はプレイヤが持つべきすべての一般的なメソッドを持つインターフェイスを作成しました。私は自分のコードで、私の同僚も実装しました。しかし、私のインターフェースに気付いていない開発者の多くは、playMyPlayer()などの独自のメソッドを作成しました。インターフェイスを実装するプログラマを強制する方法

他のプログラマーに自分のインターフェースを実装させるにはどうすればいいですか?

+2

彼らがあなたのインターフェースを使用していなかった唯一の理由が彼らがそこにいることを知らなかったために強制する必要はありません... – bdares

+1

...あなたがそれらを強制しなければならない場合、あなたはどのインターフェース使用する。 – delnan

+0

このインターフェースのタイプのパラメーターを取っているメソッドがある場合、それらのメソッドをどのように実装していないのですか?どのようにして彼らはそれをまったく動かすことができますか? –

答えて

1

独自のシナリオでExplaning:

インタフェースPlayer Intrefaceを実装している

interface Player{ 
    public void play(); 
    public void pause(); 
    public void stop(); 
} 

クラス。

class AudioPlayer implements Player{...} 

class VideoPlayer implements Player{...} 

いくつかの特別クラスです。無意味ですが、関連性があるようです

Class PlayList{} 

重要な役割を果たす列挙型。あなたのコード

Player testPlayer = MEDIAPLAYER.getPlayer(); 
: 
testPlayer.play(); 

を使用して

enum MEDIAPLAYER { 
    AUDIO,VIDEO; 

    public Player getPlayer() { 
     switch (this) { 
      case AUDIO: 
       return new AudioPlayer(); 
      case VIDEO: 
       return new VideoPlayer(); 
      default: 
       return new AudioPlayer(); 
     } 
    } 
} 

任意の新しいプレーヤーが追加された場合さて、そのエントリはPlayerタイプのオブジェクトを返しているMEDIAPLAYERに行きます。だから、誰もがPlayer

別のアプローチ実装する必要があります:あなたは抽象クラスを作成することができます

を、Playerインタフェースが持つすべての抽象メソッドを持っているMasterPlayerを、言います。さらに、MasterPlayerには管理のようないくつかの追加の方法がありますPlayList

+0

ありがとう!これはまさに私が欲しかったことです....ありがとうございました。それはいくつかのデザインパターンまたは特定の問題のためのちょうど解決策ですか? – noquery

+0

あなたの2番目のアプローチとして、私はMasterPlayer抽象クラスにPlayerのインターフェイスを変換することができます。そうする利点はありますか?どのアプローチが良いですか? – noquery

+0

2番目のケースでは、単純に 'Player'を使ってあらゆる種類のプレーヤーを参照することができます。 'VideoPlayer'と' AudioPlayer'ですが、抽象/仮想メンバーのいずれかを呼び出すと、実クラスのメンバーが呼び出されます。ゲームについては、基本クラス 'GameObject'を実行することができます。次に、すべての種類のゲームオブジェクトをリストに入れて繰り返して、スイッチ文などを必要とせずにすべてのゲームオブジェクトを更新します。 – Mario

0

ここでは主な問題点を特定しました。開発者がインターフェイスを使用しないことを選択したわけではありません。

ここで重要なのは、デベロッパーにアクセスできるコードとwikiや他の知識リポジトリが必要なものを検索できるようにすることです。

開発者に使用可能なインターフェイス/コードサンプル/利用可能なものを開発者に知らせるためのシステムを用意したら、使用することをはるかに容易にするでしょう。そして、あなたが提供するコードがよく書かれ、必要な機能をサポートしているのであれば、すべての公平さの中で、ほとんどの開発者は仕事を保存すると同時にそれを使用します。

しかし、既存のコードを書き直すのではなく、既存のコードを再利用することについては、コーディングの基準/行動規範に何かを入れておくべきですが、開発者に使用可能なコードがあることを知らせるためには、検索またはIPlayerを実装するクラスを作成する必要がグッズを望んでいる

public class UsefulClass { 
    public void DoSomethingIrresistable(IPlayer player) { 
     // ... implementation here 
    } 
} 

誰でも:

1

これを行うための唯一の方法は、あなたのインタフェースを実装するオブジェクトのインスタンスを必要とする有用なクラスを作成することです。

そうしないと、誰も最初にインターフェイスを実装するのはなぜですか?特定のクラスメンバーが存在することを保証するためのインターフェースを作成します。ユーザーに、クラスを設計する必要があると思われるようにクラスを編成させることはありません。

+0

これは私が上でコメントしたように私が考えたものと同じです。私たちが重要なメソッドの他の名前を変更しないようにするためには必要です。将来、余分な変更を加えることなく、リフレクションを使ってこれらのメソッドを呼び出す機能を置くことができます。あなたの心の中でいくつかの方法があればお勧めします – noquery

関連する問題