Java23种设计模式
定义:中介者模式为多个互相关联的对象提供服务,使多个对象都与中介者关联,实现对象之间的解耦。
需求:QQ聊天功能,有用户ABCD,其中任意两人之间均可聊天,也可以建群一个人说话所有人都收到。
- 创建用户接口,用于接收信息
public interface User {
void showMessage(String msg);
}
- 创建ABCD四个用户实体类
public class A implements User{
@Override
public void showMessage(String msg) {
System.out.print("A"+msg+"\n");
}
}
public class B implements User{
@Override
public void showMessage(String msg) {
System.out.print("B"+msg+"\n");
}
}
public class C implements User{
@Override
public void showMessage(String msg) {
System.out.print("C"+msg+"\n");
}
}
public class D implements User{
@Override
public void showMessage(String msg) {
System.out.print("D"+msg+"\n");
}
}
- 创建QQ接口,接口中有一对一聊天方法,创建群接口以及群发消息接口。
public interface QQ {
void setMessage(User from,User to,String msg);
void addUser(User user);
void setAllMessage(User from,String msg);
}
- 创建QQ实体类,并分别实现一对一聊天以及群组聊天。
public class QQManager implements QQ{
private Set<User> list = new HashSet<>();
@Override
public void setMessage(User from,User to,String msg) {
from.showMessage("发送"+msg+"成功!");
to.showMessage("接收"+msg+"成功!");
}
@Override
public void addUser(User user) {
list.add(user);
}
@Override
public void setAllMessage(User from,String msg) {
if(!list.contains(from)) list.add(from);
from.showMessage("发送"+msg+"成功!");
for(User user:list){
user.showMessage("接收"+msg+"成功!");
}
}
}
- 客户端实现逻辑
public class Test {
public static void main(String[] args) {
A a = new A();
B b = new B();
C c = new C();
D d = new D();
QQManager manager = new QQManager();
manager.addUser(a);
manager.addUser(b);
manager.addUser(c);
manager.addUser(d);
manager.setMessage(a,b,"你好");
manager.setMessage(d,a,"干嘛呢?");
manager.setAllMessage(a,"大家上班啦!");
}
}
打印结果:
A发送你好成功!
B接收你好成功!
D发送干嘛呢?成功!
A接收干嘛呢?成功!
A发送大家上班啦!成功!
B接收大家上班啦!成功!
D接收大家上班啦!成功!
A接收大家上班啦!成功!
C接收大家上班啦!成功!
这样做成功解耦了ABCD四个对象之间的关系,客户端只需要知道谁发消息?谁收消息?什么消息?