如果实现者必须确切知道要实现哪个抽象,如何应用Bridge Design模式?

时间:2018-04-20 13:46:50

标签: java

我有一个必须实现播放器和模式的游戏项目。 Player类有两个子类HumanPlayerBotPlayer,Mode类有两种模式:Easy模式和Hard模式。

这是我的班级图: My Class diagram

人类玩家和机器人将具有“初始化武器”功能。对于简易模式,人类玩家将拥有各种武器,而僵尸玩家只拥有有限数量的武器。因此,如果我像上图那样实现桥接模式,我怎么能在Easy模式下知道哪个抽象(播放器或机器人)实现“初始化武器”功能呢?

1 个答案:

答案 0 :(得分:0)

在开始游戏之前将武器传递给玩家。因此,玩家对象不知道它拥有哪种武器,而是知道武器的游戏(或游戏模式)。

有很多方法可以这样做,但作为一个例子:

public abstract class Mode {
  public abstract Collection<Weapon> getHumanWeapons();
  public abstract CollectionWeapon> getBotWeapons();
}

public class Easy extends Mode{
  public Collection<Weapon> getHumanWeapons() {
         return Collections.singleton(new NukeBlaster()));
  }

  public Collection<Weapon> getBotWeapons() {
         return Collections.singleton(new Flower()));
  }
}


public HumanPlayer(Mode mode) {
   this.weapons = mode.getHumanWeapons(); 
}

public BotPlayer(Mode mode) {
   this.weapons = mode.getBotWeapons();
}

或者......让Mode返回HumanConfigurationBotConfiguration,然后提供武器和行为。这将使Player类成为一个构造函数,并确保机器人不会秘密窃取人类武器。

public abstract class Mode {
    public abstract Configuraton getHumanConfiguration();
    public abstract Configuraton getBotConfiguration();
}

public class Configuration {
    public Collection<Weapon> getWeapons() { ... }
}

public class Player {
    private Collection<Weapon> weapons;

    public Player(Configuration configuration) {
       this.weapons = configuration.getWeapons(); 
    }
}