有时我们想要对原有的项目添加业务功能,又不想去修改原有代码中的业务类,那么我们可以使用代理类来实现该做法,在不改变原有业务类的基础上增强业务类的功能,下面
创建一个简单的示例介绍:
①新建一个测试应用(AgencyDemo)
② 添加处理学生业务的接口StudentDao
public interface StudentDao {
public void add();
}
③ 处理学生业务接口的实现类 StudentDaoImpl
public class StudentDaoImpl implements StudentDao{
public void add() {
//这里是你添加的繁杂业务,在这里只是示范作用
System.out.println("执行新增学生的新增....");
}
//通过该方法我们可以看到,在该实现类中只有一个新增学生的方法,那么此时如果我们在执行add之前先开启业务,
//,结束时关闭业务,而又不想在这里修改实现类的代码,我们可以采用代理类
}
④ 新建学生的代理类并继承业务接口 StudentDaoAgency
public class StudentDaoAgency implements StudentDao{
private StudentDao target;//被代理的对象
//在初始化的时候将被代理的对象传递进来
public StudentDaoAgency(StudentDao target) {
this.target = target;
}
//在代理类中实现增强原有业务类
public void add() {
System.out.println("开启事务....");
target.add();//执行被代理对象的方法
System.out.println("提交事务....");
}
}
⑤ 编写测试方法 StudentTest 测试业务类和代理类实现的功能
<pre name="code" class="java">public class StudentTest {
public static void main(String[] args) {
//原有的方法只能输入一项功能
System.out.println("通过原有业务类处理...");
StudentDao studentDao = new StudentDaoImpl();
studentDao.add();
System.out.println();
//通过代理服务器实现添加功能
System.out.println("通过代理类处理...");
StudentDao studentDaoAgency = new StudentDaoAgency(new StudentDaoImpl());
studentDaoAgency.add();
}
}
通过测试我们可以的到一下的结果:
通过原有业务类处理:
执行新增学生的新增....
通过代理类处理:
开启事务....
执行新增学生的新增....
提交事务....
到这里代理类实现了增强业务功能但是不改变原有的代码,希望能够帮助到你理解代理类的用法及其功能!!