- 定义:将多对多关系转化为多对一的关系。Buy、Sell、Store对象均继承自AbstractColleague(AbstractColleague中包含一个中介者对象,其所有的实现类均可执行此中介者的某方法)。
- 抽象中介者AbstractMediator包含所有原多对多的具体类。Mediator实现了所有具体的业务逻辑,具体业务类如Buy通过调用自己的成员media的方法来实现业务逻辑。
- 优点:减少类间依赖
- 缺点:中介者本身会膨胀的很大且逻辑复杂。
- 代码:
public class AbstractColleague {//包含一个protected修饰的抽象中介者对象mediator,其所有的对象可共享此中介者并调用此中介者的方法
protected AbstractMediator mediator;
public AbstractColleague(AbstractMediator mediator) {
this.mediator = mediator;
}
}
public class Buy extends AbstractColleague{
public Buy(AbstractMediator mediator){
super(mediator);
}
public void startBuy(int num){
super.mediator.execute("购买", num);
System.out.println("Buy对象执行startBuy方法");
}
public void NotBuy(){
System.out.println("Buy对象执行NotBuy方法");
}
}
public class Sell extends AbstractColleague{
public Sell(AbstractMediator mediator){
super(mediator);
}
public void startSell(int num){
super.mediator.execute("销售", num);
System.out.println("Sell对象执行startSell方法");
}
}
public class Store extends AbstractColleague{
public Store(AbstractMediator mediator){
super(mediator);
}
public void startStore(int num){
super.mediator.execute("存储", num);
System.out.println("Store对象执行startStore方法");
}
}
public abstract class AbstractMediator {//抽象中介者:包含所有需将其作为中介者来互相交互信息的子系统或对象
protected Buy buy;
protected Sell sell;
protected Store store;
public AbstractMediator(){
buy = new Buy(this);
sell = new Sell(this);
store = new Store(this);
}
public abstract void execute(String message,Object obj1);
}
public class Mediator extends AbstractMediator{
public void execute(String message, Object obj1) {//参数为判断执行哪个对象方法的条件和参数
if(message.equals("购买")){
buyComputer((Integer) obj1);
System.out.println("具体中介者mediator的execute方法"+message);
}else if(message.equals("销售")){
sellComputer((Integer) obj1);
System.out.println("具体中介者mediator的execute方法"+message);
}else if(message.equals("存储")){
storeComputer((Integer) obj1);
System.out.println("具体中介者mediator的execute方法"+message);
}
}
private void buyComputer(int num){
System.out.println("具体中介者执行buyComputer方法,购"+num+"台电脑");
}
private void sellComputer(int num){
System.out.println("具体中介者执行sellComputer方法,售"+num+"台电脑");
}
private void storeComputer(int num){
System.out.println("具体中介者执行storeComputer方法,存"+num+"台电脑");
}
}
public class Client {
public static void main(String[] args){
AbstractMediator mediator = new Mediator();
Buy buy = new Buy(mediator);
buy.startBuy(100);
Sell sell = new Sell(mediator);
sell.startSell(200);
Store store = new Store(mediator);
store.startStore(300);
}
}