Given below are sample codes implementing the UML diagram above -
/** Product interface **/ public interface Travel { public void bookTravel(String travel_id); public void cancelTravel(String travel_id); public void displayTravelInfo(); } /** Libray Classes - concrete implementations of Product **/ public class BusTravel implements Travel { @Override public void bookTravel(String travel_id) { System.out.println("Booking travel..."); } @Override public void cancelTravel(String travel_id) { System.out.println("Cancelling travel..."); } @Override public void displayTravelInfo(String travel_id) { System.out.println("Displaying travel info..."); } } public class TrainTravel implements Travel { @Override public void bookTravel(String travel_id) { System.out.println("Booking travel..."); } @Override public void cancelTravel(String travel_id) { System.out.println("Cancelling travel..."); } @Override public void displayTravelInfo(String travel_id) { System.out.println("Displaying travel info..."); } } public class FlightTravel implements Travel { @Override public void bookTravel(String travel_id) { System.out.println("Booking travel..."); } @Override public void cancelTravel(String travel_id) { System.out.println("Cancelling travel..."); } @Override public void displayTravelInfo(String travel_id) { System.out.println("Displaying travel info..."); } } /** Creator abstract class **/ public abstract class TravelCreator() { public abstract Travel getTravel(); } /** Concrete Product Creator **/ public class BusTravelCreator extends TravelCreator() { @Override public Travel getTravel() { return new BusTravel(); } } public class TrainTravelCreator extends TravelCreator() { @Override public Travel getTravel() { return new TrainTravel(); } } public class FlightTravelCreator extends TravelCreator() { @Override public Travel getTravel() { return new FlightTravel(); } } /** Client Code **/ public class TravelBooking { private final TravelCreator creator; public TravelBooking(TravelCreator creator) { this.creator = creator; } public void displayTravelInfo() { creator.getTravel().displayTravelInfo(); } } TravelBooking tb_bus = new TravelBooking(new BusTravelCreator()); TravelBooking tb_train = new TravelBooking(new TrainTravelCreator()); TravelBooking tb_flight = new TravelBooking(new FlightTravelCreator());