1.引入
中介者模式就是使用一个中介对象来封装各个对象之间的交互。由于使用了中介者对象,那么各个对象之间就不用显式地相互引用了,从而解耦。而我们一般都是直接显式地引用,而中介者模式就是多了中介者对象,一切的交互都用中介者对象去实现,就把各个对象之间复杂的交互都搞到中介者对象上去了。
2.举例
在开发中,我们对于数据的管理,可以采用一个中介者对于数据进行管理,而不是直接对原数据操作,譬如要取用户A和用户B的数据,一般我们的策略都是直接new对象,然后去调用取数据的方法,而在中介者模式中,我们对于数据无法显式的调用,而是使用中介者封装之后,通过调用中介者,然后来取数据,实际上我们只需要维护用户A和用户B与中介者之间的交互即可,而不用关心其他的。
3.实现
--3.1抽象中介者:
public interface Mediator {
public void createUser();
public void getData();
}
--3.2具体中介者:
public class ConcreteMediator implements Mediator{
private UserA userA;
private UserB userB;
public UserA getUserA() {
return userA;
}
public void setUserA(UserA userA) {
this.userA = userA;
}
public UserB getUserB() {
return userB;
}
public void setUserB(UserB userB) {
this.userB = userB;
}
@Override
public void createUser() {
// TODO Auto-generated method stub
userA=new UserA(this);
userB=new UserB(this);
}
@Override
public void getData() {
// TODO Auto-generated method stub
userA.getData();
userB.getData();
}
}
--3.3.抽象用户类:
public abstract class User {
private Mediator mediator;
public User(Mediator mediator){
this.mediator=mediator;
}
public Mediator getMediator() {
return mediator;
}
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
public abstract void getData();
}
--3.4.用户A类:
public class UserA extends User{
public UserA(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
@Override
public void getData() {
// TODO Auto-generated method stub
System.out.println("取UserA用户的数据!");
}
}
--3.5.用户B类:
public class UserB extends User{
public UserB(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
@Override
public void getData() {
// TODO Auto-generated method stub
System.out.println("取UserB用户的数据!");
}
}
测试类:
public static void main(String[] args) {
Mediator mediator =new ConcreteMediator();
mediator.createUser();
mediator.getData();
}
结果:
取UserA用户的数据!
取UserB用户的数据!
----------------------------------------------------------------------------------------------
总结:
中介者模式就是把对象之间的交互进行抽象,然后定义一个中介者,其实也就是将对象的行为转换到中介者与对象的交互,同时也将复杂性转移到了中介者的复杂性上。而中介者模式应用的场景是有一系列对象,然后对象之间的交互却是复杂的时候,就采用中介者模式。