Spring静态代理

来源:互联网 发布:linux如何修改用户组 编辑:程序博客网 时间:2024/06/05 06:00

1.   静态代理

代理:为某个对象提供一个代理,以控制对这个对象的访问。代理类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理对象代替。

静态代理:所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
静态代理的角色分析:

抽象角色----一般使用接口或者抽象类来实现。房屋出租的接口Rent!

真实角色----被代理的角色房东Host!

代理角色----代理真实角色—代理真实角色后一般会做一些附属操作。中介代理,收中介费,看房等。

客户    ----使用代理角色来进行一些操作:Client测试类。

 

老师找对象:

抽象角色:---找对象这个接口!

真实角色:---老师

代理角色---婚介:百合,非诚勿扰

客户---女对象!

案例驱动:学生租房子

抽象角色:创建一个租房接口Rent

真实角色:房东Host类。

代理角色:中介Proxy类。

客户:client类。

好处:

1、 使得真实角色处理的业务更加纯粹,不再去关注一些公共的事情。

2、 公共的业务由代理来完成----实现业务的分工

3、 公共业务发生扩展时变得更加集中和方便

缺点:

1、 类多了---代理类就随着增多。工作量变大了。开发效率降低了。

public interface Rent {

       /**

        *

        * @Description:租房  

        * @authormengqx

        * @date   2017年7月10日

        */

       void rent();

}

public class Host implements Rent{

 

    @Override

    public void rent() {

        System.out.println("房东老大爷来了!开始租房了!");

    }

   

}

 

public class UserProxy implements Rent {

   

    private Hosthost;

   

    public Host getHost() {

       returnhost;

    }

 

    public void setHost(Host host) {

       this.host =host;

    }

 

    @Override

    public void rent() {

       //  先看房!

       seeHose();

       //  单纯的代表房东去租房屋

       host.rent();

       //  付款

       pay();

       //  收取网费

       netpay();

       // 增加房租

       addPay();

    }

   

    // 看房

    public void seeHose(){

       System.out.println("黑心中介先带你看房!假好心!");

    }

   

    // 给钱

    public void pay(){

       System.out.println("真实的面目露出来了!来先签三年的合同!然后在押一付三!还要交一年卫生费!");

    }

    // 收取网费

    public void netpay(){

       System.out.println("收取网费");

    }

    //

    public void addPay(){

       System.out.println("加钱!");

    }

}

 

 

public class Test {

    public static void main(String[] args) {

       //  测试静态代理开始租房

       UserProxy up = new UserProxy();

       //  该中介代理那个对象?

       up.setHost(new Host());

       //  开始租房

       up.rent();

    }

}

原创粉丝点击