public class hw10 { public static void main(String[] args) { AirTicketSystem ticketSystem = new AirTicketSystem(); System.out.println(ticketSystem.toString()); ticketSystem.assignedTo(); ticketSystem.exchange(); ticketSystem.lock(); ticketSystem.timeOut(); ticketSystem.lock(); ticketSystem.unlock(); ticketSystem.lock(); ticketSystem.buy(); } } class AirTicketSystem { State available; State locked; State sold; State state; public AirTicketSystem() { available = new Available(this); locked = new Locked(this); sold = new Sold(this); state = available; } public void assignedTo() { state.assignedTo(); } public void timeOut() { state.timeOut(); } public void lock() { state.lock(); } public void unlock() { state.unlock(); } public void buy() { state.buy(); } public void exchange() { state.exchange(); } public void setState(State state) { this.state = state; } public State getAvailable() { return available; } public State getLocked() { return locked; } public State getSold() { return sold; } public String toString() { StringBuffer result = new StringBuffer(); result.append("\nAir Ticket System #2022"); result.append("\nThe current state is: " + state + "\n"); return result.toString(); } } interface State { public void assignedTo(); public void timeOut(); public void lock(); public void unlock(); public void buy(); public void exchange(); } class Available implements State { private AirTicketSystem ats; public Available(AirTicketSystem ats) { this.ats = ats; } public void assignedTo() { System.out.println("Available=>Sold"); ats.setState(ats.getSold()); } public void timeOut() { System.out.println("No timeOut"); } public void lock() { System.out.println("Available=>Locked"); ats.setState(ats.getLocked()); } public void unlock() { System.out.println("No unlock"); } public void buy() { System.out.println("No buy"); } public void exchange() { System.out.println("No exchange"); } public String toString() { return "The ticket is available"; } } class Locked implements State { private AirTicketSystem ats; public Locked(AirTicketSystem ats) { this.ats = ats; } public void assignedTo() { System.out.println("No assignedTo"); } public void timeOut() { System.out.println("Locked=>Available"); ats.setState(ats.getAvailable()); } public void lock() { System.out.println("No lock"); } public void unlock() { System.out.println("Locked=>Available"); ats.setState(ats.getAvailable()); } public void buy() { System.out.println("Locked=>Sold"); ats.setState(ats.getSold()); } public void exchange() { System.out.println("No exchange"); } public String toString() { return "The ticket is Locked"; } } class Sold implements State { private AirTicketSystem ats; public Sold(AirTicketSystem ats) { this.ats = ats; } public void assignedTo() { System.out.println("No assignedTo"); } public void timeOut() { System.out.println("No timeOut"); } public void lock() { System.out.println("No lock"); } public void unlock() { System.out.println("No unlock"); } public void buy() { System.out.println("No buy"); } public void exchange() { System.out.println("Sold=>Available"); ats.setState(ats.getAvailable()); } public String toString() { return "The ticket is Sold"; } }