您的位置:首页 > 其它

设计模式中介者模式(MediatorPattern)

2018-01-03 18:32 134 查看
核心模块:抽象中介者、具体中介者、抽象同事类、具体同事类

所有代码请访问: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!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息