设计模式 中介者模式

中介者模式定义

Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly,and it lets you vary their interaction independently.(用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。)

中介者模式成员

抽象中介者 & 中介者
public abstract class AbstractMediator {
    // 定义同事类
    Colleague1 colleague1;
    Colleague2 colleague2;

    // 通过setter方法把同事类注入进来
    // 因为中介者类可能只包含部分同时类,所以使用属性注入
    public void setColleague1(Colleague1 colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(Colleague2 colleague2) {
        this.colleague2 = colleague2;
    }

    // 协调完成业务逻辑
    public abstract void doSomething();

    // 封装同事类私有方法
    public void dispatch1() {
        this.colleague1.selfMethod();
    }

    public void dispatch2() {
        this.colleague2.selfMethod();
    }
}

public class Mediator extends AbstractMediator {
    @Override
    public void doSomething() {
        System.out.println("Mediator.doSomething");
        // 调用中介者方法
        super.colleague1.selfMethod();
        super.colleague2.selfMethod();
    }
}
同事类
public class Colleague1 {
    private AbstractMediator mediator;

    // 通过构造函数传递中介者
    Colleague1(AbstractMediator _mediator) {
        this.mediator = _mediator;
    }

    // 自有方法 self-method
    public void selfMethod() {
        // 处理自己的业务逻辑
        System.out.println("Colleague1.selfMethod");
    }

    // 依赖方法 dep-method
    public void depMethod() {
        System.out.println("Colleague1.depMethod");
        // 调用中介者方法
        this.mediator.dispatch2();
    }
}

public class Colleague2 {
    private AbstractMediator mediator;

    // 通过构造函数传递中介者
    Colleague2(AbstractMediator _mediator) {
        this.mediator = _mediator;
    }

    // 自有方法 self-method
    public void selfMethod() {
        // 处理自己的业务逻
        System.out.println("Colleague2.selfMethod");
    }

    // 依赖方法 dep-method
    public void depMethod() {
        System.out.println("Colleague2.depMethod");
        // 委托
        this.mediator.dispatch1();
    }
}
调用者
public class Client {
    public static void main(String[] args) {
        AbstractMediator mediator = new Mediator();
        Colleague1 colleague1 = new Colleague1(mediator);
        Colleague2 colleague2 = new Colleague2(mediator);
        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);
        mediator.doSomething();
        System.out.println("colleague1通过中介者调colleague2方法");
        colleague1.depMethod();
        System.out.println("colleague2通过中介者调colleague1方法");
        colleague2.depMethod();
    }
}

中介者模式优点

  • 减少同事类之间的依赖,每个同事类只依赖中介者

中介者模式缺点

  • 中介者会变得很复杂
  • 不符合设计原则:依赖倒置原则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值