设计模式的分类
我们都知道有 23 种设计模式,这 23 种设计模式可分为如下三类:
设计模式系列文章传送门
设计模式的 7 大原则
设计模式–单例模式【创建型模式】
设计模式–工厂方法模式【创建型模式】
设计模式–抽象工厂模式【创建型模式】
设计模式–建造者模式【创建型模式】
设计模式–原型模式【创建型模式】
设计模式–适配器模式【结构型模式】
设计模式–装饰器模式【结构型模式】
设计模式–代理模式【结构型模式】
设计模式–外观模式(门面模式)【结构型模式】
设计模式–桥接模式【结构型模式】
设计模式–组合模式【结构型模式】
设计模式–享元模式【结构型模式】
设计模式–策略模式【行为型模式】
设计模式–模板方法模式【行为型模式】
设计模式–观察者模式【行为型模式】
设计模式–迭代器模式【行为型模式】
设计模式–责任链模式【行为型模式】
设计模式–命令模式【行为型模式】
设计模式–备忘录模式【行为型模式】
设计模式–状态模式【行为型模式】
设计模式–访问者模式【行为型模式】
什么是中介者模式
中介者模式(Mediator Pattern)是一种行为设计模式,它通过使用一个中介对象来封装一系列对象之间的交互方式,中介者使得各对象之间不需要显式地相互引用,从而降低对象之间的耦合度,使得系统可以更加灵活地进行维护和扩展,中介者模式的本质其实就是封装对象之间的交互过程。
中介者模式的组成部分
中介者模式在生活中也有很多应用场景,例如物流公司、商家、用户等的场景,网购支付的场景,有支付宝、微信、云闪付支付,用户只需要发起支付,由支付平台调用支付宝、微信、云闪付支付,这其中支付平台就是中介者的角色,支付宝、微信、云闪付就是具体的同事类,下面我们使用代码来演示这个网购支付场景这个案例。
PayMediator(抽象中介者)
PayMediator 中介者定义了注册支付方式和付款的接口,具体代码如下:
public interface PayMediator {
//注册付款方式
void registerPayMethod(PayMethod payMethod);
//付款
void payment(String payMethodName, int amount);
}
PayMediatorImpl(具体中介者)
PayMediatorImpl 中介者实现了抽象中介者,持有一个支付方式的容器,并重写了注册支付方式和付款的接口,具体代码如下:
public class PayMediatorImpl implements PayMediator{
//支付方式容器
private Map<String,PayMethod> payMethodMap=new HashMap<>();
@Override
public void registerPayMethod(PayMethod payMethod) {
payMethodMap.put(payMethod.getPayMethodName(),payMethod);
}
@Override
public void payment(String payMethodName, int amount) {
PayMethod payMethod = payMethodMap.get(payMethodName);
//发起支付
payMethod.payProcess(amount);
}
}
PayMethod(抽象同事类)
PayMethod 支付方式,也就是抽象同事类,具体代码如下:
public abstract class PayMethod {
private String payMethodName;
public String getPayMethodName() {
return payMethodName;
}
public void setPayMethodName(String payMethodName) {
this.payMethodName = payMethodName;
}
public PayMethod( String payMethodName) {
this.payMethodName = payMethodName;
}
//处理付款 金额
public abstract void payProcess(int amount);
}
Alipay(具体同事类)
Alipay 支付宝支付,实现了 PayMethod 支付的方法,是一个具体同事类,具体代码如下:
public class Alipay extends PayMethod {
public Alipay(String payMethodName) {
super(payMethodName);
}
@Override
public void payProcess(int amount) {
System.out.println("支付宝支付:" + amount + "元");
}
}
WeChatPay(具体同事类)
WeChatPay 微信支付,实现了 PayMethod 支付的方法,是一个具体同事类,具体代码如下:
public class WeChatPay extends PayMethod {
public WeChatPay(String payMethodName) {
super(payMethodName);
}
@Override
public void payProcess(int amount) {
System.out.println("微信支付:" + amount + "元");
}
}
CloudQuickPassPay(具体同事类)
CloudQuickPassPay 云闪付支付,实现了 PayMethod 支付的方法,是一个具体同事类,具体代码如下:
public class CloudQuickPassPay extends PayMethod {
public CloudQuickPassPay(String payMethodName) {
super(payMethodName);
}
@Override
public void payProcess(int amount) {
System.out.println("云闪付支付:" + amount + "元");
}
}
MediatorClient(客户端)
MediatorClient 代码如下:
public class MediatorClient {
public static void main(String[] args) {
//访问者
PayMediatorImpl payMediator = new PayMediatorImpl();
//支付宝支付
Alipay alipay = new Alipay("支付宝");
//微信支付
WeChatPay weChatPay = new WeChatPay("微信");
//云闪付支付
CloudQuickPassPay cloudQuickPassPay = new CloudQuickPassPay("云闪付");
//注册支付宝支付
payMediator.registerPayMethod(alipay);
//注册微信支付
payMediator.registerPayMethod(weChatPay);
//注册云闪付支付
payMediator.registerPayMethod(cloudQuickPassPay);
//中介者调用支付宝支付
payMediator.payment("支付宝", 10);
//中介者调用微信支付
payMediator.payment("微信", 100);
//中介者调用云闪付支付
payMediator.payment("云闪付", 1000);
}
}
执行结果如下:
支付宝支付:10元
微信支付:100元
云闪付支付:1000元
可以看到我们并没有直接调用支付宝、微信、云闪付支付,而是通过中介者实现的,但最终还是正常完成了支付,结果符合预期。
中介者模式的优缺点
优点:
缺点:
中介者模式的使用场景
总结:本篇分享了中介者设计模式的相关知识,个人感觉中介者模式还是有一点复杂的,我使用了支付场景的案例进行了代码演示,希望可以帮助到不太熟悉中介者模式的朋友。
如有不正确的地方欢迎各位指出纠正。