举个例子最容易解释。
您有一个必须“做某事”的Troll (具有现有示例的类)。它的行为会根据其情绪而有所不同。如果它是 GoodMood它会睡觉,如果它是AngryMood它会跺脚。显然巨魔可以改变它的情绪(我真的不知道这是怎么做到的),因此它的行为。
我们被告知,这必须使用“接口”来完成,但我不知道如何做到这一点。显然,使用字符串或枚举(为了清洁)很容易做到这一点,但显然必须使用接口。
我得到了我的成绩,这不是家庭作业,只是想知道如何做到这一点。
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 接口,然后像以前一样使用
他们称之为策略设计模式
这可以通过多种方式解决,枚举就是其中之一:
enum TrollMood
;doSomething
方法;GOOD
并ANGRY
成为成员;doSomething
适当地执行;Troll
类有一个属性TrollMood mood
;Troll
也有一个方法doSomething
,委托给mood.doSomething
.你可以在这个设计中加入一个接口,例如你可以定义interface TrollBehavior { void doSomething(); }
和拥有TrollMood implements TrollBehavior
. 设计不要求它,但如果这是要求,那就是你的界面。
使用州设计模式来实现这一目标。