考虑您正在制作第一人称射击游戏。玩家有多种枪支可供选择。
我们可以有一个Gun
定义函数的接口shoot()
。
我们需要类的不同子Gun
类ShotGun
Sniper
,依此类推。
ShotGun implements Gun{
public void shoot(){
\\shotgun implementation of shoot.
}
}
Sniper implements Gun{
public void shoot(){
\\sniper implementation of shoot.
}
}
射击类
射手的装甲中有所有枪支。让我们创建一个List
来表示它。
List<Gun> listOfGuns = new ArrayList<Gun>();
射手可以根据需要在需要时在枪支之间循环 switchGun()
public void switchGun(){
//code to cycle through the guns from the list of guns.
currentGun = //the next gun in the list.
}
我们可以使用上面的函数设置当前的Gun,并shoot()
在fire()
被调用时简单地调用 函数。
public void fire(){
currentGun.shoot();
}
拍摄功能的行为将根据Gun
界面的不同实现而变化。
结论
当一个类函数依赖于另一个类的函数时,创建一个接口,该类将根据实现的类的instance(object)更改其行为。
例如,fire()
来自Shooter
类的函数期望guns(Sniper
,ShotGun
)实现该shoot()
函数。因此,如果我们开枪开火。
shooter.switchGun();
shooter.fire();
我们已经改变了fire()
功能的行为。