Based on the use cases description, sequence (or collaboration) diagrams attached, define a correct and complete state-chart for your project. Identify which design patterns are appropriate for implementing the state-chart into Java programming language.