如果我有一个2人游戏的程序,它接受用户输入并基于该输入,使用工厂模式创建一个新的player1然后接受更多输入并创建一个新的player2。如果我认为player1总是会成为用户,即没有计算机v电脑游戏。我可以输入一个,要求一种类型的对手,同时创建两个玩家吗?该代码对我有用,但我是否违反了我不应该做的任何事情?
import java.util.ArrayList;
import java.util.List;
public class PlayerFactory {
public List<Abstract_Player> makePlayerType(String playerType){
if(playerType.equals("2")){
List<Abstract_Player> playerList = new ArrayList<Abstract_Player>();
playerList.add(new Player1());
playerList.add(new Player2());
return playerList;
} else if(playerType.equals("c")){
List<Abstract_Player> playerList = new ArrayList<Abstract_Player>();
playerList.add(new Player1());
playerList.add(new Computer());
return playerList;
}
return null;
}
}
答案 0 :(得分:0)
如果您问工厂是否根据输入返回不同的对象是否有问题,那么不,这正是Factory模式应该做的。
然而,通过使其创建播放器列表而不是播放器类型,您可以使其完成所需的操作。我建议让玩家工厂做一件事 - 创建玩家。然后使用它的代码可以创建列表。这遵循工厂single responsibility的目标,并减少您需要的代码总量。下面的示例代码。
<强> PlayerFactory 强>
import java.util.ArrayList;
import java.util.List;
public class PlayerFactory {
public Abstract_Player makePlayerType(String playerType){
if(playerType.equals("2")){
return new Player2();
} else if(playerType.equals("c")){
List<Abstract_Player> playerList = new ArrayList<Abstract_Player>();
return new Computer();
}
throw new IllegalArgumentException("Unknown player type " + playerType);
}
}
使用播放器工厂的代码
List<Abstract_Player> playerList = new ArrayList<Abstract_Player>();
playerList.add(new Player1());
Abstract_Player opponent = playerFactory.makePlayerType(playerType);
playerlist.add(opponent);