import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

/** Kejadian sederhana yang mengalir lewat bus. */
record Kejadian(String jenis, String data) {
}

/** Bus kejadian buatan sendiri: listener dipanggil urut pendaftaran. */
class Bus {
    private final List<Consumer<Kejadian>> pendengar = new ArrayList<>();

    void daftar(Consumer<Kejadian> listener) {
        pendengar.add(listener);
    }

    void kirim(Kejadian kejadian) {
        for (Consumer<Kejadian> p : pendengar) {
            p.accept(kejadian);
        }
    }
}

/** Tombol simulasi yang meneruskan klik ke bus. */
class TombolSimulasi {
    private final String nama;
    private final Bus bus;

    TombolSimulasi(String nama, Bus bus) {
        this.nama = nama;
        this.bus = bus;
    }

    void klik() {
        bus.kirim(new Kejadian("klik", nama));
    }
}

public class BusKejadian {
    public static void main(String[] args) {
        Bus bus = new Bus();

        bus.daftar(k -> System.out.println("[log] " + k.jenis() + " pada " + k.data()));
        bus.daftar(k -> {
            if (k.jenis().equals("klik")) {
                System.out.println("[aksi] layar diperbarui karena " + k.data());
            }
        });

        TombolSimulasi simpan = new TombolSimulasi("Simpan", bus);
        TombolSimulasi hapus = new TombolSimulasi("Hapus", bus);

        simpan.klik();
        hapus.klik();
    }
}
