Java设计模式01-代理模式-静态代理
静态代理是指,代理类在程序运行前就已经定义好,其与目标类的关系在程序运行前就已经确立
静态代理类似于企业与企业的法律顾问间的关系。法律顾问与企业的代理关系,并不是在“官司”发生后才建立的,而是之前就确立好的一种关系
-----------------------------------------------------------------------------
举例
静态代理实现转账
1.定义业务接口IAccountService,含有抽象方法transfer()
//主业务逻辑:转账
void transfer();
}
2.定义目标类AccountServiceImpl,实现了业务接口,在对接口方法的实现基础上,只实现主业务逻辑转账即可
这个方法叫做目标方法
public class AccountServiceImpl implements IAccountService {/**
* 目标方法
*/
@Override
public void transfer() {
System.out.println("调用Dao层,完成转账业务");
}
}
3.定义代理类 AccountProxy,这个类要实现 IAccount 接口。并且该代理类要将接口对象作为一个成员变量,还要定义一个带参的构造器,这个参数为接口对象。目的将目标对象引入代理类,以便代理类调用目标类的目标方法
/**定义代理类,与目标类实现相同的业务接口
*/
public class AccountServiceImplProxy implementes IAccountService {
//声明业务接口对象
private IAccountService target;
public AccountServiceImplProxy() {
}
//业务接口对象作为构造器参数,用于接收目标对象
public AccountServiceImplProxy(IAccountService target) {
this.target = target;
}
/*
*代理方法,实现对目标方法的功能增强
*/
@Override
public void transfer() {
//此处为对目标类的增强
System.out.println("对转账人身份进行认证");
target.transfer();
}
}
4.定义客户类 Client。在客户类中首先要创建目标对象,再创建代理对象,并使用目标对象对其进行初始化。然后由代理对象来调用执行业务方法
public class MyTest {
public static void main(String[] args) {
//创建目标对象
IAccountService target = new AccountServiceImpl();
//创建代理对象,并使用目标对象初始化它
IAccountService servce = new AccountServiceImplProxy(target);
//这里执行的内容,就是对目标对象增强过的内容
service.transfer();
}
}