【中介者模式】

在我们开发的过程中,一个类肯定会与其他类产生依赖关系,如果这个依赖关系如网状般复杂,那么就会导致代码的耦合度很高。

提到中介,我们第一个应该想到的就是租房中介,那么我们就以租房中介来介绍中介者模式:假设有n个人想要租房,共找到m个房主,假设每一个人都把m个房子都看完再决定租哪个,那么整个系统共有(m* n)种依赖关系,这时我们引入一个租房中介,他负责与每个人和每个屋主交互,那么,这时就只有(m + n)种依赖关系,且所有的依赖关系都是和中介的依赖。( m + n < m * n m和n都为正整数,通过解不等式可以清楚的知道 当 m >= 1 n >= 2 的时候这种优势恒存在)

所以,很明显的,为了减少不同类之间的强耦合关系,我们将一系列对象的相互作用包装起来,形成了中介者。

中介者的简单实例如下所示:


// 中介者
public class Mediator {
    classA A;
    classB B;
    public void setA(classA A) { this.A = A };
    public void setB(classB B) { this.B = B };
    public void changed(class temp) {
    	if (temp == classA) { B.method(); } else { A.method(); }
    }
}

// 抽象同事类
public class Colleague {
	protected Mediator mediator;
	// 注意:同事类必须要持有中介类的引用,你要租房子,不知道中介怎么行呢?
	public Colleague(Mediator mediator) { this.mediator = mediator }
}

// 具体同事类 A
public class classA extends Colleague {
	public A(Mediator mediator) { super(); }
    public void doSth1() { this.mediator.changed(this);  }
}
// 具体同事类 B
public class classB extends Colleague {
	public B(Mediator mediator) { super(); }
    public void doSth2() { this.mediator.changed(this);  }
}

// A doSth1
public class test {
    Mediator mediator = new Mediator();
    classA A = new A(mediator);
    classB B = new B(mediator);
    mediator.setA(A);
    mediator.setB(B);
    A.doSth1(); // 会执行B.doSth2
}

从以上的代码中我们可以看出,A和B有交互,但是A和B并不知道彼此,它们只和中介交互,这样A和B之间就没有强耦合关系了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值