Subject
(1):xxxxxxxxxx
public class Customer {
private final String id;
private final Mediator mediator;
public Customer(final String id, final Mediator mediator) {
this.id = id;
this.mediator = mediator;
mediator.add(this);
}
public String getId() {
return id;
}
public void lookup(final String productId) {
mediator.lookup(this, productId);
}
public void notify(final Supplier supplier, final String productId) {
System.out.println("[Customer: " + id + "] Supplier '" + supplier.getId() + "' has the product: " + productId);
}
}
Subject
(2):xxxxxxxxxx
public class Supplier {
private final String id;
private final Mediator mediator;
public Supplier(final String id, final Mediator mediator) {
this.id = id;
this.mediator = mediator;
mediator.add(this);
}
public String getId() {
return id;
}
public void notify(final String productId) {
mediator.notify(this, productId);
}
public void lookup(final Customer customer, final String productId) {
System.out.println("[Supplier: " + id + "] Customer '" + customer.getId() + "' looking for product: " + productId);
}
}
Mediator
:xxxxxxxxxx
public interface Mediator {
void add(final Customer customer);
void add(final Supplier supplier);
void lookup(final Customer customer, final String productId);
void notify(final Supplier supplier, final String productId);
}
Concrete Mediator
:xxxxxxxxxx
public class MediatorImpl implements Mediator {
List<Customer> customers = new ArrayList<Customer>();
List<Supplier> suppliers = new ArrayList<Supplier>();
public void add(final Customer customer) {
customers.add(customer);
}
public void add(final Supplier supplier) {
suppliers.add(supplier);
}
public void lookup(final Customer customer, final String productId) {
for (Supplier supplier : suppliers) {
supplier.lookup(customer, productId);
}
}
public void notify(final Supplier supplier, final String productId) {
for (Customer customer : customers) {
customer.notify(supplier, productId);
}
}
}
Mediator
design pattern:xxxxxxxxxx
public class MediatorPatternTest {
public static void main(String[] args) {
final Mediator mediator = new MediatorImpl();
final Customer customer = new Customer("customer1", mediator);
final Supplier supplier = new Supplier("supplier1", mediator);
final String productId = "1";
customer.lookup(productId);
supplier.notify(productId);
}
}