我要写一个Player类, 有使用技能和移动的功能,用组合来写
package game.Player
import game.Skill
import game.Move
class Player {
Skill skill;
Move move;
}
大概是这样 ,那么,Skill 和 Move要做成接口吗? 这两个不会有多态。
如果做成接口的话,如何实例化?
------解决思路----------------------
按照面向对象的习惯,应该这么设计:
class Skill{}
class Movement{}
class Player{
void active(Skill skill){}
void move(Movement movement){}
}
技能和移动本身都是静态对象,而发动技能和进行移动是玩家行为
------解决思路----------------------
那么,应该采用聚合关系:
class Skill{
public void active(){}
}
class Movement{
public void move(){}
}
class Player{
private Skill skill;
private Movement movement;
Player(Skill skill, Movement movement){}
void active(){
this.skill.active();
}
void move(){
this.movement.move();
}
}
------解决思路----------------------
接口不可以实例化,也就不可以带实例属性。如果想用接口约束对象行为,就在5楼基础上增加接口:
interface Activable {
public void active(Skill skill);
}
interface Moveable{
public void move(Movement movement);
}
class Player implements Activable, Moveable{
@Override
public void active(Skill skill){}
@Override
public void move(Movement movement){}
}
其实意义不大,而且这样一来又不是聚合关系了