静态代理
静态代理在生活中很常见,举个栗子:你要去超市买水果,你可以委托你的朋友帮你去买,然后你朋友去帮你买了水果。在这个例子中你充当委托者,你朋友充当代理者,代替你去买水果,最后把水果交给你。
UML类图
创建抽象的委托者
- UserService.java
/**
* 委托类和代理类的接口
* @author LingDu
*/
public interface UserService {
public void insert();
}
具体的委托者
- UserServiceImp.java
/**
* 委托类
* @author LingDu
*/
public class UserServiceImp implements UserService {
@Override
public void insert() {
System.out.println("insert success");
}
}
具体的代理者
- Proxy.java
/**
* 代理类,实现UserService接口
* @author LingDu
*/
public class Proxy implements UserService {
private UserService userService;
public Proxy(UserService userService) {
this.userService = userService;
}
@Override
public void insert() {
System.out.println("begin...");
userService.insert();
System.out.println("end...");
}
}
测试
public static void main(String[] args) {
UserService userService = new UserServiceImp();
Proxy proxy = new Proxy(userService);
proxy.insert();
}
注意:态代理实现中,一个委托类对应一个代理类,代理类在编译期间就已经确定。
静态代理总结
可以做到在不修改目标对象的功能前提下,对目标功能扩展.
缺点 : 因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护
解决方案:代理模式-动态代理