Laboratorium: pyłek, pośrednik

Pyłek to strukturalny wzorzec projektowy, realizujący współdzielenie części stanów między obiektami. Wzorzec pyłek składa się z obiektów pyłku (Flyweight) oraz fabryki pyłków (Flyweight Factory). Stan poszczególnych pyłków nie może być zmieniony. Jego definicja odbywa się tylko raz. Fabryka zarządza kolekcją pyłków. W momencie żądania dostępu do pyłku o podanym stanie, fabryka przeszukuje kolekcję aby zwrócić referencje do istniejącego obiektu. Jeżeli obiekt nie istnieje w kolekcji to następuje jego utworzenie. Powyższe rozwiązanie znajduje zastosowanie w sytuacji, w której aplikacja tworzy istotną liczbę obiektów, które współdzielą część swojego stanu.

Pyłek
Diagram UML wzorca projektowego Pyłek

Pośrednik (zwany również jako pełnomocnik) to strukturalny wzorzec projektowy, mający zastosowanie gdy istnieje konieczność nadzorowania wykonywanej czynności. Nadzór ten jest wykonywany przed lub po wykonaniu żądania przez podmiot. Proxy wykonuje czynności pośrednie, a samo konkretne żądanie delegowane jest do podmiotu.

Diagram UML wzorca projektowego pośrednika
Diagram UML wzorca projektowego pośrednika

Opis problemu laboratorium

W listopadzie 2022 roku nasilił się problem prób nielegalnego przekraczania wschodniej granicy Unii Europejskiej. Na terytorium Rzeczypospolitej Polskiej, Republiki Litewskiej oraz Republiki Łotwy próbowali przedostać się imigranci, koncentrowani wzdłuż zachodniej granicy Białorusi przez służby reżimu Aleksandra Łukaszenki. Nielegalne przekroczenie granicy państwowej jest przestępstwem przeciwko porządkowi publicznemu, skodyfikowanym w artykule 264 Kodeksu Karnego. W przypadku jego dokonania Straż Graniczna jest obowiązana do zatrzymania podejrzanego. W trakcie czynności zatrzymywania funkcjonariusze mają obowiązek ustalić tożsamość osoby. Często jednak osoby nielegalnie przekraczające granicę pozbywają się swoich prawdziwych dokumentów tożsamości, co skutkuje niemożnością jej faktycznego ustalenia. Istnieje również ryzyko podania nieprawdziwych danych osobowych na miejscu.

Zadanie

Zaprojektować i zaimplementować rozwiązanie, umożliwiające ewidencjonowanie danych osobowych osób zatrzymywanych przez straż graniczną, na podstawie imion i nazwisk wraz ze współrzędnymi geograficznymi, które parametryzują miejsce ich zatrzymania. Wykorzystać w tym celu wzorzec projektowy pyłku (do organizacji zbioru danych) oraz pośrednika (do kontroli i poprawy wprowadzanych danych). Funkcjonariusz może działać na miejscu w pośpiechu i może wprowadzić dane składające się z różnych kombinacji wielkości liter. Pośrednik ma je ujednolicić tak aby tylko pierwsza litera danego członu imienia/nazwiska była literą dużą, a pozostałe małymi. Pyłek ma zorganizować tak aby uwspólnić wykorzystanie powtarzających się imion i przechowywać je tylko raz.

Rozwiązanie ma mieć możliwość trwałego przechowywania danych.

Przedstawić projekt oraz implementację. Okazać diagram UML.