ElDorado-Travel-and-Tour-Management-System
ElDorado-Travel-and-Tour-Management-System copied to clipboard
Bad Coding Smells concerns: Duplicate Code
THIS ISSUE IS POSTED AS A COLLEGE ASSIGNMENT I recommend applying the "Replace Type Code with State/Strategy" refactoring technique in this code. The current implementation uses a switch statement to handle different verification options in the verification method. By employing the State/Strategy pattern, you can replace this switch statement with a set of strategy classes, each representing a specific verification option. This approach enhances maintainability, readability, and adheres to the Single Responsibility Principle. The refactored code introduces a set of VerificationStrategy classes, each encapsulating the behavior for a specific verification option. The YourClass class now uses a VerificationStrategy interface and a getVerificationStrategy method to select the appropriate strategy based on the user's choice. This design promotes extensibility, making it easier to add new verification options without modifying existing code. Refactored Code:
import java.util.Scanner;
class YourClass {
private static final Scanner scan = new Scanner(System.in);
void verification() {
clearConsole();
new UserInterface().logo();
System.out.println("\t\t\t\t\t\t======================================================");
System.out.println("\t\t\t\t\t\t| User |");
System.out.println("\t\t\t\t\t\t| Please Select from the option Below |");
System.out.println("\t\t\t\t\t\t******************************************************");
System.out.println("\t\t\t\t\t\t| 1. Visa Verification |");
System.out.println("\t\t\t\t\t\t| 2. Passport Verification |");
System.out.println("\t\t\t\t\t\t| 3. Covid Certificate Verification |");
System.out.println("\t\t\t\t\t\t| 4. Return To Homepage |");
System.out.println("\t\t\t\t\t\t******************************************************");
int choice = scan.nextInt();
VerificationStrategy strategy = getVerificationStrategy(choice);
strategy.verify();
}
private VerificationStrategy getVerificationStrategy(int choice) {
switch (choice) {
case 1:
return new VisaVerificationStrategy();
case 2:
return new PassportVerificationStrategy();
case 3:
return new CovidCertificateVerificationStrategy();
case 4:
return new ReturnToHomepageStrategy(this);
default:
return new DefaultVerificationStrategy(this);
}
}
private void clearConsole() {
System.out.print("\033[H\033[2J");
}
}
interface VerificationStrategy {
void verify();
}
class VisaVerificationStrategy implements VerificationStrategy {
@Override
public void verify() {
// Implementation for Visa Verification
}
}
class PassportVerificationStrategy implements VerificationStrategy {
@Override
public void verify() {
// Implementation for Passport Verification
}
}
class CovidCertificateVerificationStrategy implements VerificationStrategy {
@Override
public void verify() {
// Implementation for Covid Certificate Verification
}
}
class ReturnToHomepageStrategy implements VerificationStrategy {
private final YourClass yourClass;
public ReturnToHomepageStrategy(YourClass yourClass) {
this.yourClass = yourClass;
}
@Override
public void verify() {
yourClass.frontPage();
}
}
class DefaultVerificationStrategy implements VerificationStrategy {
private final YourClass yourClass;
public DefaultVerificationStrategy(YourClass yourClass) {
this.yourClass = yourClass;
}
@Override
public void verify() {
yourClass.verification();
}
}
class UserInterface {
// ... (existing code)
}