Jeszcze musisz się przede wszystkim nauczyć czym jest hermetyzacja i dlaczego jest bardzo ważna. Obiektowe programowanie, czyli najlepiej żadnych gloalnych zmiennych w kodzie (może być jedynie kilka wyjątków). W L28 wysyłasz informację o stworzeniu biletu, a go nigdzie nie przechowujesz co prowadzi do tego, że za chwilę GC Javy i tak go usunie z pamięci.
Nie ma nigdy takiego package jak... object(s), manager(s), data, etc. Są one zbyt generalne, ponieważ klasy lokalizuje się w package związanym z jego dziedziną/tematyką; a nie typem klasy, bo to utopia (nieintuicyjne i praktycznie nieskończona ilość klas).
Widzę, też (linijka L12), że nie znasz przeznaczenia i czym jest klasa utility (inaczej helper). Klasa utility (w Javie oraz Google Guava nazywana od swoje przeznaczenia z końcówką -s, np Arrays, Collections, Maps, Lists, w Apache Commons Lang z sufiksem -Utils, np RandomUtils, StringUtils, NumberUtils) to klasa która rozszerza funkcjonalność już istniejącej klasy w sytuacji gdy nie mamy możliwości jej edycji lub na niej wpływu. W związku z tym klasa utility nie dziedziczy po tej klasie, a jedynie dodaje globalne (inaczej statyczne) metody dodatkowe dla danej klasy. W związku z powyższym takiej klasy nie można instantyzować (tworzyć nowych instancji - obiektów); klasa taka powinna być finalna oraz posiadać prywatny konstruktor. Problem klasy utility jest taki, że tak jak nazwa wskazuje, posiada jedynie globalne metody oraz nie ma instancji co prowadzi to tego, że nie można na nią wpływać w żaden sposób z zewnątrz poprzez na przykład nadpisanie takiej metody i zmianę jej zachowania. Klasa TicketUtil jest więc zbędna, bo wszelkie jej metody powinny znajdować się w Ticket umożliwiając jej ewentualne nadpisanie.
Dodatkowo poczytaj sobie o zaletach, a przede wszystkim wadach wzorca singleton.