3

例で説明するのが最も簡単です。

「何かをする」必要があるTroll (既存の例を持つクラス) があります。ムードに応じて異なる動作をします。GoodMoodの場合は眠り、 AngryMoodの場合は足を踏み鳴らします。どうやらトロールはムードを変更できるようで (これがどのように行われるかはよくわかりません)、したがってその動作も変更できます。

これは「インターフェース」を使用して行う必要があると言われましたが、それがどのように行われるかわかりません。String または Enum を使用してこれを行うのは明らかに非常に簡単ですが (クリーンアップのため)、明らかにインターフェイスを使用する必要がありました。

これは宿題ではありません。どうすればできるか知りたいだけです。

4

3 に答える 3

5
interface Mood{
   behave();
}

class GoodMood implements Mood{
   behave(){
       // behavior for good mood
   }
}


class AngryMood implements Mood{
   behave(){
       // behavior for angry mood
   }
}

class Troll{

    doSomething(Mood m){
         m.behave()
     }
}

を使用して呼び出す

new Troll().doSomething(new AngryMood());
new Troll().doSomething(new GoodMood());

説明

あなたは実装されていない振る舞いメソッドを持つ共通のインターフェース Mood を持っています。さまざまなタイプの気分に合わせて実装できます。したがって、Troll クラスでは、適切な気分クラスを渡す必要があります。気分に応じて、 doSomething() メソッドが関連するタスクを実行します

利点

ムードをさらに追加したい場合は、コードの主要部分に多くの変更を加える必要はありません。別のクラスを作成し、Mood インターフェイスを実装してから、以前と同じように使用するだけです

そして彼らはそれを戦略デザインパターンと呼んでいます

于 2013-05-31T10:32:12.577 に答える
1

これは多くの方法のいずれかで解決でき、列挙型はその 1 つです。

  1. 定義しますenum TrollMood
  2. doSomething抽象メソッドを定義させます。
  3. メンバーとして持つようにGOODします。ANGRY
  4. doSomething各メンバーが適切に実装できるようにします。
  5. Trollクラスにプロパティを持たせますTrollMood mood
  6. に委譲するTrollメソッドもあります。doSomethingmood.doSomething

この設計にインターフェイスを組み込むことができます。たとえば、 を定義interface TrollBehavior { void doSomething(); }して持つことができますTrollMood implements TrollBehavior。設計はそれを要求しませんが、それが要件である場合は、インターフェースがあります。

于 2013-05-31T10:31:44.877 に答える
0

この目的を達成するには、ステート デザイン パターンを使用します。

于 2013-06-07T05:27:47.460 に答える