代理模式概述
代理模式,就是让一些功能让代理方去完成的模式。代理模式分为三部分:代理功能接口、被代理角色,代理角色。
- 代理功能接口:其实不是指代理模式要额外创建一个接口进行代理,而是说,代理角色和被代理角色都要实现指定功能对应的接口。比如,被代理角色的a功能需要被代理,而a功能是A接口下的,那么被代理角色和代理角色都要实现A接口。
- 被代理角色:被代理角色的某些功能需要被代理角色来代理完成。
- 代理角色:代理角色负责完成被代理角色需要被代理的功能。
代码实现
若小明要送信给小红,但是小明抽不出时间跑路,于是让身为邮递员的老刘帮忙送信给小红。
代理功能接口
java
public interface ISender {
void sendLetter(Person person);
}
小明的需要被代理的功能是送信,老刘也要有送信的功能,二者都要实现送信功能的接口。
被代理角色
java
public class RealSender extends Person implements ISender {
public RealSender(String name){
this.name = name;
}
@Override
public void sendLetter(Person person) {
System.out.println("将信送到" + person.getName() + "手中");
}
}
Person就是一个类,类中的name属性继承给子类。被代理角色倒没有什么要注意的,可能设计被代理角色之后才发现有功能需要被代理。
代理角色
java
public class Postman extends Person implements ISender {
private ISender sender;
public Postman(String name,ISender sender){
this.name = name;
this.sender = sender;
}
@Override
public void sendLetter(Person person) {
this.sender.sendLetter(person);
}
}
代理角色中要有一个属性用来注入被代理角色的对象,以方便让代理角色来代理被代理角色的功能。在代理角色中,调用被代理角色的功能即可完成代理。
业务代码
java
public class Main {
public static void main(String[] args) {
RealSender sender = new RealSender("小明");
Receiver receiver = new Receiver("小红");
Postman postman = new Postman("老刘",sender);
postman.sendLetter(receiver);
}
}
总结
代理模式就是一个对象让另一个对象为它打工。代理模式分为动态代理和静态代理,精妙的地方主要在动态代理,想了解的可以看我主页博客SSM框架,spring-aop的学习,在AOP中就可以实现将重复冗余的代码让代理对象来执行,以实现简化代码。
这里代理模式东西不多,更多知识点在AOP的学习中已经写过了,就不重复写了,见以上链接。