Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类的示例如何更改其行为?Java接口使用_Java_Interface_Behavior - Fatal编程技术网

类的示例如何更改其行为?Java接口使用

类的示例如何更改其行为?Java接口使用,java,interface,behavior,Java,Interface,Behavior,用一个例子最容易解释 你有一个巨魔(一个包含现有示例的类),它必须“做点什么”。 它根据自己的情绪表现不同。 如果心情好,它就睡觉;如果心情不好,它就跺脚。 很明显,巨魔可以改变它的情绪(我真的不知道这是怎么做到的),从而改变它的行为 我们被告知,这必须使用“接口”来完成,但我不知道如何才能做到。 显然,使用字符串或枚举很容易做到这一点(为了清洁起见),但显然必须使用接口 我得到了我的分数,这不是家庭作业,只是想知道如何做到这一点。这可以通过多种方式解决,枚举就是其中之一: 定义enum 让它定

用一个例子最容易解释

你有一个巨魔(一个包含现有示例的类),它必须“做点什么”。 它根据自己的情绪表现不同。 如果心情好,它就睡觉;如果心情不好,它就跺脚。 很明显,巨魔可以改变它的情绪(我真的不知道这是怎么做到的),从而改变它的行为

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


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

这可以通过多种方式解决,枚举就是其中之一:

  • 定义
    enum
  • 让它定义一个抽象的
    doSomething
    方法
  • 让它有
    好的
    生气的
    作为成员
  • 让每个成员适当地实施
    doSomething
  • Troll
    类有一个属性
    TrollMood
  • Troll
    也有一个方法
    doSomething
    ,委托给
    mood.doSomething
  • 您可以在这个设计中加入一个接口,例如,您可以定义
    接口TrollBehavior{void doSomething();}
    ,并让
    TrollBehavior实现TrollBehavior
    。设计没有要求它,但是如果这是要求,那么就有你的接口

    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());
    
    解释

    您有一个普通的界面气氛,但没有实现behave方法。对于不同类型的情绪,您可以实施它。所以在你的巨魔课程中,你只需要通过适当的情绪课程。根据情绪,doSomething()方法将执行相关任务

    好处

    如果您想添加更多的情绪,则不需要对代码的主要部分进行太多更改。只需创建另一个类,实现Mood接口,然后像以前一样使用

    他们称之为


    使用状态设计模式来实现此目标

    设计可能没有,但OP有。@DaveNewton你认为如何将一个接口引入其中还不够明显吗?