-
Notifications
You must be signed in to change notification settings - Fork 0
Lab2
Simas Skilinskas edited this page Jan 18, 2015
·
12 revisions
Factory šablonas panaudotas skirtingiems žaidėjų tipams realizuoti. Šiuo metu realizuoti du žaidėjų tipai. Vienas žaidėjo tipas yra žmogus kurio eilei atėjus konsolė paprašo įvesti spėjamą raidę. Kitas tipas robotas kuris automatiškai spėja atsitiktinę raidę. Abu tipai turi tuos pačius "Player" interfeiso metodus kurie realizuoti skirtingai.
public interface Player {
public String getName();
public char chooseLetter(String letters);
}
public class HumanPlayer implements Player {
private String name;
private Logger logger;
public HumanPlayer(String name) {
this.name = name;
this.logger = Logger.getInstance();
}
@Override
public String getName() {
return this.name;
}
@Override
public char chooseLetter(String letters) {
String input = "";
System.out.println("Unused letters: " + letters);
while (input.length() != 1) {
System.out.print("Enter one character:");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
input = br.readLine();
}
catch (IOException e){
logger.logMessage("Error reading from user");
}
}
return input.charAt(0);
}
}
public class RobotPlayer implements Player {
private String name;
public RobotPlayer(String name) {
this.name = name;
}
@Override
public String getName() {
return this.name;
}
@Override
public char chooseLetter(String letters) {
Random rand = new Random();
int randomNum = rand.nextInt(letters.length());
return letters.charAt(randomNum);
}
}
public class PlayerFactory {
public Player getPlayer(String playerType, String playerName) {
// TODO: use chain of responsibility
if (playerType.equalsIgnoreCase("Human")) {
return new HumanPlayer(playerName);
} else if (playerType.equalsIgnoreCase("Robot")) {
return new RobotPlayer(playerName);
} else {
// TODO: Add checks for this case
return null;
}
}
}
Žaidėjų grupės formavimui panaudotas "iterator" šablonas. Jis priima skirtingai pateiktus žaidėjų sąrašus ir naudodamas iteratorių juos visus gali pateikti sujungtus į vieną sąrašą ArrayList pavidalu.