优点:简化了对象之间的关系,将对象相互关系封装,统一管理对象相互关系,实现系统松耦合。
缺点:由于将对象相互关系封装,中介者一般相对复杂,使得系统维护相对困难。

模式关系图:

角色作用:
-
抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
-
具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
-
抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
-
具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
例子:模拟一个中介卖房的例子,从简。
抽象同事类(Colleague)角色:
/**
* 这是一个抽象同事类
*/
public interface Colleague {
void selfAction();
void outAction();
}
抽象中介者(Mediator)角色:
/**
* 这是一个中介接口
* 抽象中介类,定义了同事对象到中介者对象的接口
*/
public interface Mediator {
void registered(String name,Colleague colleague);
void command(String name);
}
具体中介者(ConcreteMediator)角色:
import java.util.Map;
/**
* 这是一个具体中介者类
*/
public class ConcreteMediator implements Mediator {
private Map<String, Colleague> map = new HashMap<String, Colleague>();
@Override
public void registered(String name, Colleague colleague) {
map.put(name, colleague);
}
@Override
public void command(String name) {
map.get(name).selfAction();
map.get(name).outAction();
}
}
具体同事类(Concrete Colleague)角色:
import android.util.Log;
/**
* 这是一个具体同事类
* 买房者
*/
public class Buyer implements Colleague {
private Mediator mediator;
public Buyer(Mediator mediator) {
this.mediator = mediator;
mediator.registered("Buyer", this);
}
@Override
public void selfAction() {
Log.d("TAG", "Buyer selfAction!");
}
@Override
public void outAction() {
Log.d("TAG", "我要买一套房子!");
//通过中介者寻找到卖房者
mediator.command("Seller");
}
}
import android.util.Log;
/**
* 这是一个具体同事类
* 卖房者
*/
public class Seller implements Colleague {
private Mediator mediator;
public Seller(Mediator mediator) {
this.mediator = mediator;
mediator.registered("Seller", this);
}
@Override
public void selfAction() {
Log.d("TAG", "Seller selfAction!");
}
@Override
public void outAction() {
Log.d("TAG", "春天小区一套120平米房子,100万!");
}
}
调用:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
/**
* 这是调用者
*/
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Mediator mediator = new ConcreteMediator();
Seller seller = new Seller(mediator);
Buyer buyer = new Buyer(mediator);
buyer.selfAction();
buyer.outAction();
}
}
结果:

已完成测试!有不对的地方欢迎指出,感恩。
网友评论