De meeste klassen die we geschreven hebben tot nu toe stellen echte dingen uit het echte leven voor, zoals mensen, auto’s en zelfs vliegtuigen. Veel klassen echter die tijdens het programmeren worden gebruikt, stellen vaak niet iets tastbaars voor, maar eerder een concept, zoals een lijst, wachtrij, file reader of zoiets simpels als een menu.
Vandaag maak je je eigen keuze selector. Een keuze selector is een component dat een lijst van items weergeeft en waarmee je een item kunt selecteren op basis van een bepaalde interactie (door bijv. op een regel te klikken, de naam in te typen, enz.) We houden het vandaag eenvoudig door de lijst te nummeren en de gebruiker een getal te laten invoeren waarmee de selectie wordt afgerond.
Zorg ervoor dat je de volgende methodes implementeert:
addOption(..)
methode moet het mogelijk maken om meer opties toe te voegen aan de selector.promptMenu()
drukt het menu af en vraagt om invoer van de gebruiker. Zodra een geldig item is geselecteerd, wordt het bijbehorende object geretourneerd.Om de kracht van dit systeem te laten zien gebruiken we een zeer simplistische Person
klasse als te selecteren doel, dus we vullen de selector met Person
instanties.
Het gebruik van de optie-selector ziet er als volgt uit:
public static void main(String[] args) {
OptionSelector menu = new OptionSelector();
menu.addOption(new Person("John"));
menu.addOption(new Person("Jill"));
menu.addOption(new Person("Joann"));
menu.addOption(new Person("Nick"));
menu.addOption(new Person("Bert"));
menu.addOption(new Person("Ravi"));
menu.addOption(new Person("Elton"));
Person selectedPerson = menu.promptMenu();
System.out.println("The person selected was: " + selectedPerson);
}
We gaan ons vandaag niet bezighouden met het generiek maken van deze OptionSelector (waarmee we zeggen dat de OptionSelector alle types kan gebruiken in plaats van alleen de Person
klasse). Het maken van generic klassen laten we liggen voor een ander vak.
Uiteraard moet je wel goed encapsulation goed toepassen, zodat je geen illegale waarden kunt invoeren!
*************** Option selector ***************
1) John
2) Jill
3) Joann
4) Nick
5) Bert
6) Ravi
7) Elton
Please select a value: -10
Invalid value. Please try again: 25
Invalid value. Please try again: 6
The person selected was: Ravi