2013-11-23 63 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);