Mediator
It is used to
encapsulate comunications between related objects (named Colleagues).
Colleagues
don't need to know anything about each other.
Collegues will send messages
to the Mediator.
Mediator send messages
to the other colleques.
class StockMarket {
public static void main(String[] args) {
StockMediator nyse = new StockMediator();
new FloorBroker("GormanSlacks", nyse);
new ElectronicBroker("JTPoorman", nyse);
}
}
class StockMediator implements Mediator {
public void addColleague(Colleague colleague) {}
public void saleOrder(String stock, int shares) {}
public void buyOrder(String stock, int shares) {}
}
interface Mediator {
public void addColleague(Colleague colleague);
public void saleOrder(String stock, int shares);
public void buyOrder(String stock, int shares);
}
class FloorBroker extends Colleague {
public FloorBroker(String name, Mediator m) {
super(name, m);
System.out.println(
"FloorBroker: " + name + " signed up with the stockexchange!"
);
}
}
class ElectronicBroker extends Colleague {
public ElectronicBroker(String name, Mediator n) {
super(name, n);
System.out.println(
"ElectronicBroker: " + name + " signed up with the stockexchange!"
);
}
}
abstract class Colleague {
private Mediator mediator;
public Colleague(String b, Mediator m) {
mediator = m;
mediator.addColleague(this);
}
public void saleOrder(String stock, int shares) {
mediator.saleOrder(stock, shares);
}
public void butyOrder(String stock, int shares) {
mediator.buyOrder(stock, shares);
}
}
import java.util.ArrayList;
class StockExchange {
public static void main(String[] args) {
StockMediator nyse = new StockMediator();
FloorBroker b1 = new FloorBroker("GormanSlacks", nyse);
ElectronicBroker b2 = new ElectronicBroker("JTPoorman", nyse);
b1.orderBuy("MSFT", 100);
b1.orderSell("GOOG", 50);
b2.orderBuy("MSFT", 100);
b2.orderSell("NRG", 10);
b1.orderBuy("NRG", 10);
}
}
class FloorBroker extends Colleague {
public FloorBroker(String name, Mediator m) {
super(name, m);
}
}
class ElectronicBroker extends Colleague {
public ElectronicBroker(String name, Mediator m) {
super(name, m);
}
}
abstract class Colleague {
private Mediator mediator;
public String name;
public Colleague(String n, Mediator m) {
name = n;
mediator = m;
mediator.addColleague(this);
}
public void orderSell(String sym, int siz) {
mediator.orderSell(sym, siz, this);
}
public void orderBuy(String sym, int siz) {
mediator.orderBuy(sym, siz, this);
}
}
class StockMediator implements Mediator {
private ArrayList<Colleague> colleagues = new ArrayList<>();
private ArrayList<Order> buyOrders = new ArrayList<>();
private ArrayList<Order> sellOrders = new ArrayList<>();
public void addColleague(Colleague collegue) {
colleagues.add(collegue);
}
public void orderSell(String sym, int siz, Colleague colleague) {
sellOrders.add(new Order(sym, siz, colleague.name));
System.out.println(
"Mediator: " + colleague.name + " / Sell / " + siz + " " + sym
);
}
public void orderBuy(String sym, int siz, Colleague colleague) {
buyOrders.add(new Order(sym, siz, colleague.name));
System.out.println(
"Mediator: " + colleague.name + " / Buy / " + siz + " " + sym
);
}
}
interface Mediator {
public void addColleague(Colleague c);
public void orderSell(String sym, int siz, Colleague c);
public void orderBuy(String sym, int siz, Colleague c);
}
class Order {
public Order(String sym, int siz, String n) {}
}
Mediator v1.0 Basic Skeleton
Mediator v1.2 Colleagues are signing up and Mediator assign broker Ids
Mediator v1.4 Collegues sale and buy orders, Order object added
Mediator v1.6 Add logic, buy/sell, error stock exceded