java - 一个类的例子如何改变它的行为? Java接口(interface)使用

标签 java interface behavior

用一个例子最容易解释。

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

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

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

最佳答案

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

解释

你有一个通用接口(interface) Mood 和一个未实现的 behave 方法。对于不同类型的心情,您可以实现它。因此,在您的巨魔类(class)中,您只需要通过适当的情绪类(class)即可。 doSomething() 方法会根据心情执行相关任务

好处

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

And they call it Strategy Design Pattern

关于java - 一个类的例子如何改变它的行为? Java接口(interface)使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855150/

相关文章:

java - 从 Activity 外部捕获 onRequestPermissionsResult()

java - throttle(int power) 和 getSpeed() 之间的区别 :int in a UML diagram?

iphone - 在所有设备尺寸上将 UIVIEW 居中

javascript - 如果我在 JavaScript 中拼接克隆数组,为什么我的原始数组会被拼接?

java - 如何处理编译器中的字符串文字错误

java - 什么时候可能会抛出 IOError?

java - JgraphT 导出到点文件

android - 如何实现固定高度的 BottomSheetDialogFragment

orm - ORM 对 OO 设计是否适得其反?

java - Android 服务在不到 5 分钟后停止