Java静态代理概述示例

一、静态代理的概念

代理是指为某个对象提供一个代理,以控制对这个对象的访问,例如房东想把房子租出去,但是自己不想去做其他的麻烦事,就会交给中介公司去做,中介公司则会在帮房东租房的基础上做其他事情,例如待人看房和收中介费等等。所谓静态代理就是指由程序员创建或工具生成代理类的源码,再编译代理类。

二、静态代理模式的要求与示例

  • 真实对象和代理对象要实现同一个接口
  • 代理对象要代理真实对象

例如一个租房的接口

public interface Rent {
    void rent();
}

房东类实现租房接口,表示房东想要租房

public class Lord implements Rent {
    @Override
    public void rent() {
        System.out.println("房东要租房子");
    }
}

对于中介来说,除了出租房子,还要做额外工作

public class proxy implements Rent{

    //中介会有其想要代理的房东
    private Lord lord;

    //中介代理需要出租房子的房东
    public proxy(Lord lord) {
        this.lord = lord;
    }

    //中介有自己要额外做的工作
    public void seeHouse(){
        System.out.println("中介带人看房");
    }
    public void fee(){
        System.out.println("收取中介费");
    }

    //中介实现租房动作
    @Override
    public void rent() {
        lord.rent();//中介要帮房东来收取房租
        seeHouse();//中介带人看房
        fee();//收取中介费
    }
    
}

对于顾客来说,找的是中介

public class Tenant {
    public static void main(String[] args) {
        
        //中介代理房东来租房
        proxy proxy = new proxy(new Lord());

        //顾客找的是中介, 所以用中介的租房动作
        proxy.rent();

    }
}

输出结果

房东要租房子
中介带人看房
收取中介费

不难发现,租房子的人是房东,中介帮忙做了其他事情

三、静态代理优缺点

优点:

  • 真实对象可以专注于自己的工作
  • 代理对象可以在真实对象基础上扩展其他工作,有解耦合的作用

缺点:

  • 代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度
  • 代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值