我有一个对象GameLogic
,它有一个Player
(接口)对象。
GameLogic
有一个方法getAvailableMoves()
,可在GameLogic
内使用,让Player
了解他的可用动作。
我目前正在实施一个AIPlayer
(实现Player
),它应该使用Minimax算法作为策略。为此,我希望能够在GameLogic
内使用getAvailableMoves()
的{{1}}方法。但是,我想在不打破封装的情况下这样做。也就是说我试图避免将AIPlayer
作为对GameLogic
的引用。
此方案的适当解决方案是什么?我假设我应该使用设计模式,但我不确定哪个。
答案 0 :(得分:0)
如果您希望能够向对象发送消息,那么您的对象通常需要了解它(除非您想将其实现为事件,这看起来很尴尬)。如果您担心在AIPlayer类和GameLogic之间创建紧密耦合,您可以为该方法创建一个接口,让GameLogic实现它,然后将其传递给AIPlayer。这样,AIPlayer唯一的依赖是接口,而不是特定的GameLogic实现。
答案 1 :(得分:0)
方法1:
无需在玩家内部调用getAvailableMoves,但是您可以在 getAvailableMoves中将玩家作为参数传递:
class GameWorld {
main(){
GameLogic gl = new GameLogic();
AIPlayer player = new AIPlayer();
player.move(gl.getAvailableMoves(player));
}
}
GameLogic类
class GameLogic {
public object getAvailableMoves(Player player){
player.getX();
player.getY();
return availableMoves;
}
}
玩家类
class Player{
float x;
float y;
}
AIPlayer类
class AIPlayer extends Player {
void move(){
}
}
方法2:
另一种方法是使getAvailableMoves静态并从播放器类内部调用它。
AIPlayer类
class AIPlayer extends Player {
void move(){
GameLogic.getAvailableMoves(this);
}
}
GameLogic类
class GameLogic {
public static object getAvailableMoves(Player player){
player.getX();
player.getY();
return availableMoves;
}
}