04.中介者模式

用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。

看到这个定义,你想到了什么?MVP架构?Presenter持有View和Model是的他们可以交互,但View和Model并未互相持有,从而达到了解耦.

栗子

/**
 * 中介者
 */
public interface Mediator {
    void notice(Person person, String msg);//通知方法
}

/**
 * 房屋中介
 */
public class HouseMediator implements Mediator {

    Buyer buyer;
    Landlord landlord;

    public Buyer getBuyer() {
        return buyer;
    }

    public void setBuyer(Buyer buyer) {
        this.buyer = buyer;
    }

    public Landlord getLandlord() {
        return landlord;
    }

    public void setLandlord(Landlord landlord) {
        this.landlord = landlord;
    }

    @Override
    public void notice(Person person, String msg) {
        System.out.println("中介收到信息,并转发给相应的目标人群");
        if (person == buyer){
            landlord.receive(msg);
        }else if (person == landlord){
            buyer.receive(msg);
        }
    }
}

/**
 * 中介者的客户(买房人和房东的抽象父类)
 */
public abstract class Person {

    protected  Mediator mediator;

    public Person(Mediator mediator) {
        this.mediator = mediator;
    }

    public abstract void send(String message);//发布信息

    public abstract void receive(String message);//接收信息
}

/**
 * 买房人
 */
public class Buyer extends Person {

    public Buyer(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void send(String message) {
        System.out.println("买房者发布信息:"+message);
        mediator.notice(this,message);
    }

    @Override
    public void receive(String message) {
        System.out.println("买房者收到信息:"+message);
    }
}

/**
 * 房东
 */
public class Landlord extends Person {

    public Landlord(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void send(String message) {
        System.out.println("房东发布信息:"+message);
        mediator.notice(this,message);
    }

    @Override
    public void receive(String message) {
        System.out.println("房东收到信息:"+message);
    }
}

/**
 * 测试类
 */
public class Test {

    public static void main(String[] args) {
        HouseMediator houseMediator = new HouseMediator();
        Buyer buyer = new Buyer(houseMediator);
        Landlord landlord = new Landlord(houseMediator);
        houseMediator.setBuyer(buyer);
        houseMediator.setLandlord(landlord);
        buyer.send("求购汤臣一品");
        System.out.println("------------------------");
        landlord.send("我有豪宅一套");
    }
}

结果

image.png

你可能感兴趣的:(04.中介者模式)