设计模式读书笔记-中介者模式

2016-08-21
读书笔记
  • 定义:将多对多关系转化为多对一的关系。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);
    }
}

Kommentare: