2013-11-23 48 views
0

如果我有一个2人游戏的程序,它接受用户输入并基于该输入,使用工厂模式创建一个新的player1,然后接受更多输入并创建一个新玩家2。如果我假设玩家1一直是用户,即没有计算机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

如果你问是否问题是你的工厂根据它的输入返回不同的对象,那么不,这正是工厂模式应该做的。

但是,通过使其创建玩家列表而不是玩家类型,您可以做得更多。我建议让玩家工厂做一件事 - 创建玩家。然后使用它的代码可以创建列表。这遵循工厂的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);