Aby odpalić projekt należy:
- Sklonować repo komendą
git clone git@github.com:lsereda/battleships.git - Odpalić taska
fatJarkomendągradle fatJar - Uruchomić zbudowany program komendą
java -jar build/libs/battleships-1.0-SNAPSHOT.jarwraz z dodanymi parametrami uruchomieniowymi.
Parametry uruchomieniowe:
- mode [client|server] - wskazuje tryb działania (jako serwer - przyjmuje połączenie, jako klient - nawiązuje połączenie z serwerem)
- port - wskazuje port, na którym aplikacja ma się komunikować
- mapPath - wskazuje ścieżkę z mapą w formacie
.txt - host (dotyczy tylko klienta) - wskazuje adres serwera.
Przykładowa komenda uruchamiająca wraz z parametrami java -jar build/libs/battleships-1.0-SNAPSHOT.jar -mode server -mapPath map.txt -port 1234.
Singleton(klasy Client, Server) - zapewnienie globalnego dostępu do tych klas oraz zapewnienie, że będzie istnieć co najwyżej jedna instancja każdej z nichDependency Injection(konstruktor klasy ScannerCommandReceiver) - usunięcie bezpośredniej zależności między między klasami ScannerCommandReceiver oraz ScannerFactory(klasy View, ViewFactory, ViewType) - ukrycie zaimplementowanej logiki i sprawienie, żeby użytkownik skupił się na używaniu, a nie tworzeniu nowych obiektówNull object(klasy EmptyView, EmptyTurn) - ukrycie absencji (referencji do nulla) obiektów poszczególnych typów, ułatwienie procesu tworzenia oraz testowania aplikacjiIterator(klasy Iterator, MapIterator) - umozliwienie przeglądania pól określonego typu w Mapie bez wnikania w jej implementacjęMonad(klasy Maybe, Just, Nothing) - przeniesienie pewnych zachowań do abstrakcji (mogłem uzyć klasy Optional z biblioteki standardowej, jdnak wolałem w celach treningowych napisać własną implementację)Builder(klasa Session wraz z wewnętrzną klasą SessionBuilder) - rozdzielenie sposobu tworzenia Session od jej implementacjiState(klasa State oraz jej klasy pochodne) - zmiana zachowania wewnętrznego klasy poprzez zmianę jej stanu