(所有源码均在:https://github.com/zongzhec/JavaPractise)
目录
静态代理模式
作用描述
代理可以帮助被代理者完成一些前期的准备工作和后期的完善工作。核心的业务逻辑仍然由被代理者完成。
适合一些和核心业务逻辑无关,而且多变的代码
代码结构
1. 接口:主题
2. 被代理者
3. 代理者
要求
1. 代理类和被代理类实现同一个接口
2. 代理类要有一个被代理类的属性(target),这样才能把核心业务代码交给被代理者。
源码
package zongzhe.design_pattern;
/**
* 需求:计算add()的运行时间
*/
public class ProxyDemo {
public static void main(String[] args) {
// 使用代理类和被代理类来完成工作
UserDAO dao = new UserDAO();
UserDAOProxy proxy = new UserDAOProxy(dao);
proxy.add();
}
}
interface DAO {
void add();
}
// 被代理者
class UserDAO implements DAO {
@Override
public void add() {
System.out.println("添加用户");
}
}
// 代理者
class UserDAOProxy implements DAO {
private DAO target;//代表被代理者
public UserDAOProxy(DAO target) {
super();
this.target = target;
}
@Override
public void add() {
System.out.println("add方法开始执行");
long startTime = System.currentTimeMillis();
// 核心业务逻辑要交还给被代理者
target.add();
long endTime = System.currentTimeMillis();
System.out.println("add() 方法结束,耗时: " + (endTime - startTime));
}
}