我们以房屋中介为例子,来建立我们的案例。我们先要建立 net.haicoder.mediator
包,然后建立一个抽象的中介者类 Medium.java
,然后创建具体的中介者类 HaicoderMedium.java
建立抽象的客户类 Customer.java
和具体的客户类 Buyer.java
Seller.java
和测试类 TestMain.java
。文件创建完毕,目录结构如下图:
Medium.java
代码如下:
package net.haicoder.mediator;
/**
* 嗨客房地产中介
*/
public interface Medium {
/**
* 客户注册
*
* @param customer
*/
void registerCustomer(Customer customer);
/**
* 发放消息
*
* @param message
*/
void displayMessage(String from, String message);
}
HaicoderMedium.java
代码如下:
package net.haicoder.mediator;
import java.util.ArrayList;
import java.util.List;
public class HaicoderMedium implements Medium {
List<Customer> customerList = new ArrayList<>();
@Override
public void registerCustomer(Customer customer) {
if (!customerList.contains(customer)) {
customerList.add(customer);
customer.setMedium(this); //顾客将当前的中介信息保存
}
}
/**
* 中介者将信息发布,过滤掉发布消息的本人
*
* @param from
* @param message
*/
@Override
public void displayMessage(String from, String message) {
customerList.forEach(tmpCustomer -> {
if (!from.equals(tmpCustomer.getName())) {
tmpCustomer.receiveMessage(from, message);
}
});
}
}
Customer.java
代码如下:
package net.haicoder.mediator;
/**
* 客户
*/
public abstract class Customer {
/**
* 保存相应的中介信息
*/
protected Medium medium;
/**
* 当前消费者名称
*/
protected String name;
/**
* 发布消息,买房发布信息,不会直接通知其它人,而是只管往该中介中发布
*/
abstract void sentMessage(String message);
/**
* 接收消息
*/
abstract void receiveMessage(String from, String message);
public Medium getMedium() {
return medium;
}
public void setMedium(Medium medium) {
this.medium = medium;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Seller.java
代码如下:
package net.haicoder.mediator;
/**
* 买方
*/
public class Seller extends Customer {
public Seller(String name) {
this.name = name;
}
/**
* @param message
*/
@Override
void sentMessage(String message) {
medium.displayMessage(name, message);
}
@Override
void receiveMessage(String from, String message) {
System.out.println("卖房者收到 " + from + "发布消息 : " + message);
}
}
TestMain.java
代码如下:
package net.haicoder.mediator;
public class TestMain {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
Medium medium = new HaicoderMedium();
Customer buyer = new Buyer("买房者");
Customer seller = new Seller("卖房者");
medium.registerCustomer(buyer);
medium.registerCustomer(seller);
buyer.sentMessage("好想买一套房子啊");
seller.sentMessage("好想卖一套房子啊");
}
}
代码运行结果如下图:
一般的对象之间的简单的关系,并且合理的时候是不需要使用中介者模式的,对于那些对象关系比较复杂的才会建议考虑使用设计模式中的中介者模式,将网状的关系变成星状结构,使得对象之间的关系变得清晰。