介绍
代理模式是结构性模式,它通过引入一个新的对象(如小图片和远程代理对象)来实现对真实对象的操作或者将新的对象作为真实对象的一个替身。
我们现实生活中也有许多代理模式的影子。例如朋友出国旅游,我们可以托朋友帮忙买些东西。或者,我们点外卖,配送员替我们去取餐等等。
结构图
图片来源于网络
一共有三个角色
- Subject(抽象主题角色)
- Proxy(代理主题角色)
- RealSubject(真实主题角色)
时序图
图片来源于网络
案例
这边的配送员就是代理角色,顾客是真实角色,配送员完成顾客到店取货的步骤。
抽象主题角色
public abstract class Subject {
public abstract void getFood();
}
顾客
public class Customer extends Subject {
@Override
public void getFood() {
System.out.println("客户拿到餐啦!");
}
}
配送员
public class DeliveryMan extends Subject {
private Customer customer = new Customer();
public void goShop(){
System.out.println("去商家取餐!");
}
@Override
public void getFood() {
goShop();
customer.getFood();
finish();
}
public void finish() {
System.out.println("结束送餐!");
}
}
测试
public class Client {
public static void main(String[] args) {
Subject subject = new DeliveryMan();
subject.getFood();
}
}
测试结果
这里写图片描述
总结
上面的案例只是简单的代理模式,实际开发中要复杂许多。
而且代理有还许多种,例如远程代理(Remote Proxy)、 虚拟代理(Virtual Proxy)等等。
还有一种较为高级的代理模式叫做动态代理,Spring AOP就是采用动态代理模式。有兴趣的可以