Untitled
unknown
plain_text
10 months ago
5.3 kB
7
Indexable
Never
// Interfejs Stanu interface Stan { void wkladanieMonety(); void przekrecanieGalki(); void wydawanieGumy(); void zwracanieMonety(); } // Stan BRAK_GUM class StanBrakGum implements Stan { private final Maszyna maszyna; public StanBrakGum(Maszyna maszyna) { this.maszyna = maszyna; } @Override public void wkladanieMonety() { System.out.println("Nie możesz włożyć monety, maszyna jest pusta - brak gum"); } @Override public void przekrecanieGalki() { System.out.println("Przekręciłeś gałkę, ale w automacie brak kulek gumowych"); } @Override public void wydawanieGumy() { System.out.println("Błąd - Nie wydano gumy do żucia"); } @Override public void zwracanieMonety() { System.out.println("Nie możesz zwrócić monety której nie włożyłeś"); } } // Stan NIE_MA_MONETY class StanNieMaMonety implements Stan { private final Maszyna maszyna; public StanNieMaMonety(Maszyna maszyna) { this.maszyna = maszyna; } @Override public void wkladanieMonety() { System.out.println("Włożyłeś monetę"); maszyna.ustawStan(maszyna.getStanJestMoneta()); } @Override public void przekrecanieGalki() { System.out.println("Przekręciłęś gałkę do wydania gumy ale nie włożyłęś monety"); } @Override public void wydawanieGumy() { System.out.println("Błąd - Musisz najpierw zapłacić"); } @Override public void zwracanieMonety() { System.out.println("Nie włożyłeś monety"); } } // Stan JEST_MONETA class StanJestMoneta implements Stan { private final Maszyna maszyna; public StanJestMoneta(Maszyna maszyna) { this.maszyna = maszyna; } @Override public void wkladanieMonety() { System.out.println("Nie możesz włożyć kolejnej monety"); } @Override public void przekrecanieGalki() { System.out.println("Przekręciłeś gałkę i otrzymujesz gumę"); maszyna.ustawStan(maszyna.getStanGumaSprzedana()); maszyna.wydawanieGumy(); } @Override public void wydawanieGumy() { System.out.println("Błąd - Nie wydano gumy do żucia"); } @Override public void zwracanieMonety() { System.out.println("Moneta zwrócona"); maszyna.ustawStan(maszyna.getStanNieMaMonety()); } } // Stan GUMA_SPRZEDANA class StanGumaSprzedana implements Stan { private final Maszyna maszyna; public StanGumaSprzedana(Maszyna maszyna) { this.maszyna = maszyna; } @Override public void wkladanieMonety() { System.out.println("Proszę czekać na zakończenie poprzedniej operacji czyli wydania gumy"); } @Override public void przekrecanieGalki() { System.out.println("Dwukrotne przekręcenie gałki nie da ci kolejnej gumy!"); } @Override public void wydawanieGumy() { System.out.println("Guma wysuwa się z automatu"); maszyna.liczbaGum = maszyna.liczbaGum - 1; if (maszyna.liczbaGum == 0) { System.out.println("Ups, brak kulek gumowych!"); maszyna.ustawStan(maszyna.getStanBrakGum()); } else { maszyna.ustawStan(maszyna.getStanNieMaMonety()); } } @Override public void zwracanieMonety() { System.out.println("Już przekręciłeś gałkę i wydano gumę, nie można już zwrócić monety"); } } public class Maszyna { private Stan stanBrakGum; private Stan stanNieMaMonety; private Stan stanJestMoneta; private Stan stanGumaSprzedana; private Stan stan; int liczbaGum = 0; public Maszyna(int count) { this.liczbaGum = count; stanBrakGum = new StanBrakGum(this); stanNieMaMonety = new StanNieMaMonety(this); stanJestMoneta = new StanJestMoneta(this); stanGumaSprzedana = new StanGumaSprzedana(this); if (count > 0) { stan = stanNieMaMonety; } else { stan = stanBrakGum; } } public void wkladanieMonety() { stan.wkladanieMonety(); } public void przekrecanieGalki() { stan.przekrecanieGalki(); } public void wydawanieGumy() { stan.wydawanieGumy(); } public void zwracanieMonety() { stan.zwracanieMonety(); } public void ustawStan(Stan stan) { this.stan = stan; } public Stan getStanBrakGum() { return stanBrakGum; } public Stan getStanNieMaMonety() { return stanNieMaMonety; } public Stan getStanJestMoneta() { return stanJestMoneta; } public Stan getStanGumaSprzedana() { return stanGumaSprzedana; } public void uzupelnijGumy(int numGumBalls) { this.liczbaGum = numGumBalls; stan = stanNieMaMonety; } @Override public String toString() { return "Maszyna{" + "stan=" + stan + ", liczbaGum=" + liczbaGum + '}'; } }