// PATRÓN ABSTRACT FACTORY - EQUIPOS GAMER

import java.util.Scanner;

// PRODUCTOS ABSTRACTOS

interface Teclado {
    void mostrarTeclado();
}

interface Mouse {
    void mostrarMouse();
}

interface Monitor {
    void mostrarMonitor();
}

// PRODUCTOS CONCRETOS - NIVEL BÁSICO

class TecladoBasico implements Teclado {
    @Override
    public void mostrarTeclado() {
        System.out.println("Teclado básico de membrana");
    }
}

class MouseBasico implements Mouse {
    @Override
    public void mostrarMouse() {
        System.out.println("Mouse básico con cable");
    }
}

class MonitorBasico implements Monitor {
    @Override
    public void mostrarMonitor() {
        System.out.println("Monitor 60Hz 1080p");
    }
}

// PRODUCTOS CONCRETOS - NIVEL INTERMEDIO

class TecladoIntermedio implements Teclado {
    @Override
    public void mostrarTeclado() {
        System.out.println("Teclado mecánico con retroiluminación");
    }
}

class MouseIntermedio implements Mouse {
    @Override
    public void mostrarMouse() {
        System.out.println("Mouse gaming con 6 botones");
    }
}

class MonitorIntermedio implements Monitor {
    @Override
    public void mostrarMonitor() {
        System.out.println("Monitor 144Hz 1440p");
    }
}

// PRODUCTOS CONCRETOS - NIVEL PROFESIONAL

class TecladoProfesional implements Teclado {
    @Override
    public void mostrarTeclado() {
        System.out.println("Teclado mecánico RGB inalámbrico");
    }
}

class MouseProfesional implements Mouse {
    @Override
    public void mostrarMouse() {
        System.out.println("Mouse gamer inalámbrico 26000 DPI");
    }
}

class MonitorProfesional implements Monitor {
    @Override
    public void mostrarMonitor() {
        System.out.println("Monitor 4K 240Hz 1ms");
    }
}

// ABSTRACT FACTORY

interface EquipoGamerFactory {
    Teclado crearTeclado();
    Mouse crearMouse();
    Monitor crearMonitor();
}

// FÁBRICAS CONCRETAS

class EquipoBasicoFactory implements EquipoGamerFactory {
    @Override
    public Teclado crearTeclado() { return new TecladoBasico(); }
    @Override
    public Mouse crearMouse() { return new MouseBasico(); }
    @Override
    public Monitor crearMonitor() { return new MonitorBasico(); }
}

class EquipoIntermedioFactory implements EquipoGamerFactory {
    @Override
    public Teclado crearTeclado() { return new TecladoIntermedio(); }
    @Override
    public Mouse crearMouse() { return new MouseIntermedio(); }
    @Override
    public Monitor crearMonitor() { return new MonitorIntermedio(); }
}

class EquipoProfesionalFactory implements EquipoGamerFactory {
    @Override
    public Teclado crearTeclado() { return new TecladoProfesional(); }
    @Override
    public Mouse crearMouse() { return new MouseProfesional(); }
    @Override
    public Monitor crearMonitor() { return new MonitorProfesional(); }
}



public class Main {  // ← ANTES: MainEquiposGamer, AHORA: Main
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.println("=======================================");
        System.out.println(" SISTEMA DE EQUIPOS GAMER");
        System.out.println(" PATRÓN ABSTRACT FACTORY");
        System.out.println("=======================================");
        System.out.println("NIVELES DE EQUIPO:");
        System.out.println("1. Básico");
        System.out.println("2. Intermedio");
        System.out.println("3. Profesional");
        System.out.print("\nSeleccione nivel: ");
        
        int opcion = sc.nextInt();
        EquipoGamerFactory factory = null;
        String nivel = "";
        
        switch (opcion) {
            case 1: 
                factory = new EquipoBasicoFactory();
                nivel = "Básico";
                break;
            case 2: 
                factory = new EquipoIntermedioFactory();
                nivel = "Intermedio";
                break;
            case 3: 
                factory = new EquipoProfesionalFactory();
                nivel = "Profesional";
                break;
            default:
                System.out.println("Nivel no válido.");
                sc.close();
                return;
        }
        
        Teclado teclado = factory.crearTeclado();
        Mouse mouse = factory.crearMouse();
        Monitor monitor = factory.crearMonitor();
        
        System.out.println("\n===== EQUIPO " + nivel.toUpperCase() + " CREADO =====");
        teclado.mostrarTeclado();
        mouse.mostrarMouse();
        monitor.mostrarMonitor();
        
        sc.close();
    }
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: