Mediator Pattern Sample Code - architectstory/MSA_REF_PATTERN_CQRS GitHub Wiki

public class MediatorPattern {
    public static void main(String[] args) {
        new ConcreteMediator();

        ConcreteMediator mediator = new ConcreteMediator();
        ServiceA serviceA = new ServiceA(mediator);
        ServiceB serviceB = new ServiceB(mediator);

        serviceA.process();
        serviceB.perform();
    }
}

class ConcreteMediator implements Mediator {
    private ServiceA serviceA;
    private ServiceB serviceB;

    public ConcreteMediator() {
        this.serviceA = new ServiceA(this);
        this.serviceB = new ServiceB(this);
    }

    @Override
    public void notify(Object sender, String event) {
        if (event.equals("A")) {
            System.out.println("Mediator React: Message From ServiceA");
            serviceB.perform();
        }
    }
}
interface Mediator {
    void notify(Object sender, String event);
}

class ServiceA {
    private Mediator mediator;
    public ServiceA(Mediator mediator) {
        this.mediator = mediator;
    }
    public void process() {
        System.out.println("ServiceA Processing");
        mediator.notify(this, "A");
    }
}


class ServiceB {
    private Mediator mediator;
    public ServiceB(Mediator mediator) {
        this.mediator = mediator;
    }
    public void perform() {
        System.out.println("ServiceB Processing");
    }
}