使用代理类增强业务类的功能示例

来源:互联网 发布:js改变div的style 编辑:程序博客网 时间:2024/04/28 09:19

有时我们想要对原有的项目添加业务功能,又不想去修改原有代码中的业务类,那么我们可以使用代理类来实现该做法,在不改变原有业务类的基础上增强业务类的功能,下面

创建一个简单的示例介绍:

①新建一个测试应用(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();            }}


通过测试我们可以的到一下的结果:

通过原有业务类处理:
执行新增学生的新增....


通过代理类处理:
开启事务....
执行新增学生的新增....
提交事务....

到这里代理类实现了增强业务功能但是不改变原有的代码,希望能够帮助到你理解代理类的用法及其功能!!


0 0