JAVA 中介者模式

文章目录

介绍

命令模式

实现

介绍

描述

中介者模式设计模式属于行为型模式,是作为通信双方的中介,代理双方,用一个中介对象类封装一系列对象之间的交互。

特点

优点:简化了对象之间打的关系,将系统对象之间的相互关系进行封装,将各个同事类之间的联系进行解耦。

缺点:由于封装对象之间的交互关系,导致中介类的逻辑关系变得复杂,系统维护比较困难。

实现原理

Mediator作为抽象中介者,ConcreteMediator作为具体中介者实现Mediator,需要知道所有的同事类,并且同事类将发送信息给中介者,中介者也需要根据消息向对应的同事类发送消息。

Colleague抽象同事类,ConcreteColleague具体同事类实现Colleague,作为同事类,只需要明确自己的行为,同时知道中介者是谁。

中介者处于核心位置,定义了所有同事之间的关系,作为转接存在。

命令模式

实现

租房案例,主人与租户,一个中介者协调主人和租户的关系。

第一步:创建中介者和同事抽象类。

// 抽象中介者
public abstract class Mediator {
    public abstract void concat(String msg,Person person);
}
// 抽象同事
public abstract class Person {
    Mediator mediator;
    String name;

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

第二步:创建具体中介者和同事类。

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

    public void concat(String msg){
        mediator.concat(msg,this);
    }
    public void getMsg(String msg){
        System.out.println("我是租客 " + name + " 收到信息 " + msg);
    }
}
// 主人
public class Master extends Person{
    public Master(Mediator mediator, String name) {
        super(mediator, name);
    }

    public void concat(String msg){
        mediator.concat(msg,this);
    }
    public void getMsg(String msg){
        System.out.println("我是主人 " + name + " 收到信息 " + msg);
    }
}
// 具体中介者
public class ConcreteMediator extends Mediator{
    // 明确所有同事
    private Tenant tenant;
    private Master master;

    @Override
    public void concat(String msg, Person person) {
        // 同事相互关系处理
        if (person == tenant){
            master.getMsg(msg);
        }else {
            tenant.getMsg(msg);
        }
    }

    public void setTenant(Tenant tenant) {
        this.tenant = tenant;
    }

    public void setMaster(Master master) {
        this.master = master;
    }
}

第三步:测试。

public class Test {
    public static void main(String[] args) {
        // 中介
        ConcreteMediator mediator = new ConcreteMediator();

        // 同事类
        Master master = new Master(mediator,"主人 -- 王");
        Tenant tenant = new Tenant(mediator,"租户 -- 李");
        mediator.setMaster(master);
        mediator.setTenant(tenant);

        // 发送
        master.concat("卖房中 ....");
        tenant.concat("买房中 ....");
        /*
        我是租客 租户 -- 李 收到信息 卖房中 ....
        我是主人 主人 -- 王 收到信息 买房中 ....
        */
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值