核心模块:抽象中介者、具体中介者、抽象同事类、具体同事类
所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git
使用场景:双方不直接交流的情况下,进行通信(调用等);
优点:降低耦合性,不需要显示的调用对象,减少系统对象之间的耦合;
缺点:关系过于复杂的话,中介类将异常庞大;
注意:
1,不同于访问者模式,访问者模式有具体的数据元,且访问模式数据元可扩展;
/**
* Created by tory on 2017/12/11.
* //中介者模式,
* 适合两人之间单独联系;不适合群聊
* 不同与访问者模式,访问者模式有固定的数据元或者流程,
* 优点,解耦,减少子类:缺点,中介者过于庞大
*/
public class MediatorPattern {
public static void main(String[] args) {
HouseMediator mediator = new HouseMediator();
TenantPerson tenant = new TenantPerson("tory",mediator);
HousePerson owner = new HousePerson("jay",mediator);
mediator.setHouseowner(owner);
mediator.setTenant(tenant);
tenant.contact("hello");
owner.contact("do you need house?");
tenant.contact("yes,i do!!");
}
}
//Meditor 抽象中介者
abstract class Mediator {
abstract void contact(String message, Person person);
}
//ConcreteMediator 具体中介者
class HouseMediator extends Mediator {
//中介者要知道通信的双方,如果关系过大,比如群聊,或者散发性网络,中介者将异常庞大
TenantPerson tenant;
HousePerson houseowner;
public void setTenant(TenantPerson tenant) {
this.tenant = tenant;
}
public void setHouseowner(HousePerson houseowner) {
this.houseowner = houseowner;
}
@Override
void contact(String message, Person person) {
//这里实现opc,
//person 发送者Person 发送的message
if (person == tenant) {
houseowner.getMessage(message);
} else if (houseowner == person) {
tenant.getMessage(message);
}
}
//房屋中介
}
//Colleague 抽象同事类
abstract class Person {
String name;
Mediator mediator;
Person(String name, Mediator mediator) {
this.name = name;
this.mediator = mediator;
}
}
//ConcreteColleague 具体同事类
class TenantPerson extends Person {
//承租人
TenantPerson(String name, Mediator mediator) {
super(name, mediator);
}
void contact(String message) {
mediator.contact(message, this);
}
void getMessage(String message) {
System.out.println("Tenant," + name + " receive:" + message);
}
}
class HousePerson extends Person {
//房东
HousePerson(String name, Mediator mediator) {
super(name, mediator);
}
void contact(String message) {
mediator.contact(message, this);
}
void getMessage(String message) {
System.out.println("HouseOwner," + name + " receive:" + message);
}
}
内容打印
Hello World!
HouseOwner,jay receive:hello
Tenant,tory receive:do you need house?
HouseOwner,jay receive:yes,i do!!