前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java SE————静态代理

Java SE————静态代理

作者头像
Java架构师必看
发布2021-07-21 15:00:33
2750
发布2021-07-21 15:00:33
举报
文章被收录于专栏:Java架构师必看

代理模式(proxy):

给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。

            在代理模式中,代理对象和目标对象需要实现同一个接口。

IPerson.interface

代码语言:javascript
复制
package proxy;

public interface IPerson {
    public void say();
}

以日志记录为例

若没有代理,每个目标对象方法里都要写记录日志的代码,是代码冗余。如下

代码语言:javascript
复制
public class Man implements IPerson {

    @Override
    public void say() {
        
        long begin = System.currentTimeMillis();
        System.out.println("男人赚钱养家");
        long end = System.currentTimeMillis();
        System.out.println(end-begin);
    }

}

若采用静态代理:

静态代理:

      静态代理发生在编译期间。收到创建的。在编译时就已经将接口,被代理类,代理类等确定下来。代理类和代理对象都要实现同一个接口,同时,代理对象要操控目标对象。

缺点:接口和代理类是一对一的,有多个接口代理,就需要多个代理类,繁琐,类爆炸。

Man.class

代码语言:javascript
复制
package proxy;

public class Man implements IPerson {

    @Override
    public void say() {
        System.out.println("男人赚钱养家");
    }

}

PersonProxy.class

代码语言:javascript
复制
package proxy;

public class PersonProxy implements IPerson{
    IPerson person;

    public PersonProxy(IPerson person){ //把目标对象person传入
        this.person=person;             //生成本类的person对象
    }

    @Override
    public void say() {
        long begin = System.currentTimeMillis();
        person.say();                   //引用目标对象调用目标对象的方法
        long end = System.currentTimeMillis();
        System.out.println(end-begin);
    }
}

ProxTest.class

代码语言:javascript
复制
package proxy;

public class ProxTest {
    public static void main(String[] args) {
        Man man = new Man();
        Women women = new Women();
        OldMan oldMan = new OldMan();

        PersonProxy manProxy = new PersonProxy(man);        //生成多个代理类对象,为不同的目标对象服务
        PersonProxy womanProxy = new PersonProxy(women);
        PersonProxy oldManProxy = new PersonProxy(oldMan);
        manProxy.say();
        womanProxy.say();
        oldManProxy.say();

      /*  运行结果:   男人赚钱养家
                    0
                    买衣购物
                    0
                    干农活
                    0*/
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代理模式(proxy):
  • 以日志记录为例
  • 静态代理:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档