静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法。
如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来,即在运行方法前后插入执行一个别的操作,下面是一个简单的示例。
用户接口
public interface UserInterface {
boolean saveUser(User user);
}
用户接口实现
public class UserInterfaceImpl implements UserInterface {
@Override
public boolean saveUser(User user) {
System.out.println("保存用户: " + user.getName());
return true;
}
}
public class Test {
public static void main(String[] args) {
testStaticProxy();
}
private static void testStaticProxy() {
User user = new User();
user.setName("tom");
new StaticProxy(new UserInterfaceImpl()).saveUser(user);
}
static class StaticProxy implements UserInterface {
private UserInterface userInterface;
public StaticProxy(UserInterface userInterface) {
this.userInterface = userInterface;
}
@Override
public boolean saveUser(User user) {
System.out.println("静态代理-开始保存用户");
boolean result = userInterface.saveUser(user);
System.out.println("静态代理-保存用户结果: " + result);
System.out.println();
return result;
}
}
}
结果输出:
静态代理-开始保存用户
保存用户: tom
静态代理-保存用户结果: true
通过代码实战的方法学习设计模式,是不是觉得静态代理很简单了?
下面问题来了,如果我们想把用户接口内所有的方法都要代理,那我们所有的方法都要代理一遍,又或者之后又添加了新的方法,那又得重新写代理,十分麻烦,明天分享下动态代理的实现,解决了静态代理的不便扩展性。