(25)世界需要和平——中介者模式
最后更新于:2022-04-01 14:30:58
### 中介者模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立改变它们之间的交互。(摘抄)
中介者模式就相当与把对象与对象之间的耦合转移到自己身上。让事物与事物之间都通过一个中介去联系,例如租房子,找中介公司,那么你就是与中介公司耦合,而不是与房东,而房东也是与中介公司耦合。
~~~
public abstract class Mediator
{
public abstract void send(String message ,Person person);
}
public abstract class Person
{
Mediator mediator;
public Person(Mediator mediator)
{
this.mediator = mediator;
}
public abstract void send(String message);
public abstract void notify(String message);
}
public class HouseMediator extends Mediator
{
private Person renter;
private Person tenant;
public void setRenter(Person renter) {
this.renter = renter;
}
public void setTenant(Person tenant) {
this.tenant = tenant;
}
@Override
public void send(String message, Person person) {
// TODO Auto-generated method stub
if (person == tenant)
{
renter.notify(message);
}
else
{
tenant.notify(message);
}
}
}
public class Renter extends Person
{
public Renter(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
public void send(String message)
{
mediator.send(message, this);
}
public void notify(String message)
{
System.out.println("Renter"+message);
}
}
public class Tenant extends Person
{
public Tenant(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
public void send(String message)
{
mediator.send(message, this);
}
public void notify(String message)
{
System.out.println("Tenant"+message);
}
}
class Client
{
public static void main()
{
HouseMediator houseMediator = new HouseMediator();
Person tenant = new Tenant(houseMediator);
Person renter = new Renter(houseMediator);
houseMediator.setRenter(renter);
houseMediator.setTenant(tenant);
renter.send("交房租");
tenant.send("好");
}
}
~~~
中介的出现,减少了原本有交集的两个对象在程序中的耦合,使得其可以独立发生改变和复用。
同时由于中介的控制集中化,于是把复杂的操作全部都转移到了中介中,这就造成中介十分复杂。
中介模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,或者想定制一个分步在多个类中的行为,而又不想生成太多的子类的场合.