设计模式 中介者模式

概念

结构

案例实现

定义一个抽象中介者

//抽象中介者
public abstract class Mediator {
    //声明一个联络方法
    public abstract void contact(String message,Person person);
}

抽象同事类

@AllArgsConstructor
public abstract class Person {
    protected String name;
    protected Mediator mediator;
}

定义房东

public class HouserOwner extends Person{
    public HouserOwner(String name, Mediator mediator) {
        super(name, mediator);
    }

    //与中介者联系
    public void contact(String message){
        mediator.contact(message,this);
    }

    //获取信息
    public void getMessage(String message){
        System.out.println("房主 " + name + "获取到的信息:" + message);
    }
}

定义租房者

public class Tenant extends Person{
    public Tenant(String name, Mediator mediator) {
        super(name, mediator);
    }

    //与中介者联系
    public void contact(String message){
        mediator.contact(message,this);
    }

    //获取信息
    public void getMessage(String message){
        System.out.println("租房者 " + name + "获取到的信息:" + message);
    }
}

具体实现中介者

@Data
public class MediatorStructure extends Mediator{
    private HouserOwner houserOwner;
    private Tenant tenant;


    @Override
    public void contact(String message, Person person) {
        if(person == houserOwner){
            tenant.getMessage(message);
        }
        else {
            houserOwner.getMessage(message);
        }
    }
}

测试使用

public class Client {
    public static void main(String[] args) {
        MediatorStructure mediatorStructure = new MediatorStructure();

        //租房者和房主需要知道中介者
        HouserOwner houserOwner = new HouserOwner("张三",mediatorStructure);
        Tenant tenant = new Tenant("李四",mediatorStructure);

        //在中介机构注册类
        mediatorStructure.setHouserOwner(houserOwner);
        mediatorStructure.setTenant(tenant);

        //测试使用
        tenant.contact("有房子吗 需租一个");
        houserOwner.contact("我这有");
    }
}

总结

posted @ 2021-11-05 14:49  一个经常掉线的人  阅读(31)  评论(0编辑  收藏  举报