中介者模式

/**
 * 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介模式后,普通对象之间的交流就通过中介来进行,避免了相互进行依赖
 * 模式特点:一个中介接口和其实现类,该实现类拥有所有的普通对象的引用
 *        每个普通对象都引用一个中介对象
 *
 */
//中介接口
public interface IAgent {
    //登记用户
    void register(Pseron pseron);

    /**
     * 传递消息
     * @param message 消息内容
     * @param from 消息来源的用户名,如房东还是租户
     */
    void forward(String message,String from);
}
//房屋中介
public class HouseAgent implements IAgent {
    private List<Pseron> list=new ArrayList<>(); //所有的用户

    @Override
    public void register(Pseron pseron) {
        if(!list.contains(pseron)){
            list.add(pseron);
            pseron.linkAgent(this);
        }
    }

    @Override
    public void forward(String message,String fromName) {
        for (Pseron pseron : list) {
            if(!pseron.name.equals(fromName)){ //传递消息给其他人
                pseron.receive(message);
            }
        }
    }
}
//用户,拥有发送消息和接收消息,以及绑定中介的方法
public abstract  class Pseron {
    protected String name;
    abstract void send(String message);
    abstract void receive(String message);
    abstract void linkAgent(IAgent agent);

}
//房东
public class HouseOwer extends Pseron {
    private IAgent agent;


    public HouseOwer(String name) {
        this.name = name;
    }

    @Override
    void send(String message) {
        agent.forward(message,this.name);
    }

    @Override
    void receive(String message) {
        System.out.println(message);
        System.out.println("我是房东:我有房出租");
    }
    //绑定中介对象
    @Override
    void linkAgent(IAgent agent) {
        this.agent=agent;
    }
}
//租客
public class Renter extends Pseron {
    private IAgent agent;


    public Renter(String name) {
        this.name = name;
    }

    @Override
    void send(String message) {
        agent.forward(message,this.name);
    }

    @Override
    void receive(String message) {
        System.out.println(message);
        System.out.println("我是房客,我要租房");
    }
    //绑定中介对象
    @Override
    void linkAgent(IAgent agent) {
        this.agent=agent;
    }
}
public class Test {
    public static void main(String[] args) {
        HouseOwer houseOwer = new HouseOwer("房东");//房东
        Renter renter = new Renter("租客");//租客
        HouseAgent houseAgent = new HouseAgent();
        houseAgent.register(houseOwer);
        houseAgent.register(renter);
        renter.send("我是房客:请问谁有房子出租");
        houseOwer.send("我是房东:有单间出租");


    }
}

 

posted @ 2019-05-29 14:19  yangxiaohui227  阅读(248)  评论(0编辑  收藏  举报