style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Ayuda con patrón de diseño Oberver

Buenas tardes.

A ver si alguien me puede ayudar ya que estoy un poco perdido.

Estoy estudiando Java y me han pedido hacer un ejercicio con el patrón Oberver. Me piden un ejemplo sencillo para ejecutar desde consola y es que cuando un vehículo esté terminado se avise al usuario. Por más vueltas que le doy a este patrón no sé como hacer este ejemplo.

A ver si me podéis pasar un ejemplo parecido para que pueda entenderlo y realizar el ejemplo como me piden.

Un saludo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El patrón se usa para

El patrón se usa para desacoplar la clase que genera un evento de quién está interesado en consumirlo.

Por ejemplo, (en tu ejemplo) un sistema puede emitir un evento un vehículo está terminado y los "observadores" quién solicitó el vehículo, el sistema de inventario, etc.

Entonces necesitas la interfaz consumidora de eventos ( el Observer )

interface VehicleBuildListener {
    void started(Vehicle v);

    void finished(Vehicle v);
}

Y la clase que va a emitir notificaciones

class AssemblyLine {
    private List<VehicleBuildListener> observers;

    void addObserver(VehicleBuildListener o) {
        observer.add(o);
    }

    public void assembly() {
        Vehicle v = startNewVehicle();
        finish(v);
    }

    void startNewVehicle() {
        Vehicle brandNew = new Vehicle();
        for (VehicleBuildListener observer : observer) { // notifica a los observers
            observer.started(brandNew);
        }
        /// toma un pizca de acero, otra de tuercas etc
        return brandNew;
    }

    void finishVehicle(Vehicle vehicle) {
        //.. y aprieta el ultimo tornillo
        for (VehicleBuildListener observer : observers) { // notifica a los observers
            observer.finished(vehicle);
        }
    }
}

Con esas dos clases puedes entonces crear el programa que va a iniciar la linea de ensamblaje y notificar a los observadores cuando un nuevo vehículo comienza y cuando termina.

class Main {
    public static void main(String... args) {
        AssemblyLine a = new AssemblyLine();
        a.addObserver(new Cliente()); // class Client implements VehicleBuildListener
        a.addObserver(new Inventario()); // class Inventario implements VehicleBuildListener
        a.addObserver(new RegistroNacionalDeAutos()); // class RegistroNacionalDeAutos implements VehicleBuildListener

        a.assembly();
    }
}

Como se puede ver, la lista de observadores ( el cliente, el inventario, el registro de autos) no esta acoplada con la clase que emite los eventos ( la linea de ensamblaje) , puede no haber observadores, o puede haber tres o veinte y la funcionalidad sigue sin afectarse.

Espero que esto te sirva

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">