Skip to content
Simas Skilinskas edited this page Jan 18, 2015 · 12 revisions

"Factory" šablonas

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;
        }
    }
}

"Iterator" šablonas

Ž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.

Clone this wiki locally