3

举个例子最容易解释。

您有一个必须“做某事”的Troll (具有现有示例的类)。它的行为会根据其情绪而有所不同。如果它是 GoodMood它会睡觉,如果它是AngryMood它会跺脚。显然巨魔可以改变它的情绪(我真的不知道这是怎么做到的),因此它的行为。

我们被告知,这必须使用“接口”来完成,但我不知道如何做到这一点。显然,使用字符串或枚举(为了清洁)很容易做到这一点,但显然必须使用接口。

我得到了我的成绩,这不是家庭作业,只是想知道如何做到这一点。

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. 定义enum TrollMood
  2. 让它定义一个抽象doSomething方法;
  3. 让它拥有GOODANGRY成为成员;
  4. 让每个成员doSomething适当地执行;
  5. Troll类有一个属性TrollMood mood
  6. letTroll也有一个方法doSomething,委托给mood.doSomething.

你可以在这个设计中加入一个接口,例如你可以定义interface TrollBehavior { void doSomething(); }和拥有TrollMood implements TrollBehavior. 设计不要求它,但如果这是要求,那就是你的界面。

于 2013-05-31T10:31:44.877 回答
0

使用州设计模式来实现这一目标。

于 2013-06-07T05:27:47.460 回答