什么是静态代理模式

什么是代理模式?

代理模式可以实现帮助被代理者完成一些前期的准备工作和后期的善后工作,但是核心的业务逻辑仍然是由被代理者完成。

什么是静态代理?

静态代理就是代理者能专门为被代理对象做一些额外的工作,但是实际的核心业务逻辑还是由代理者调用被代理者来完成!

单单说概念其实也并不是能的理解深刻,下面来举个生活中的栗子
房东中介住户三个对象,房东要出租房子,但是房东有五栋楼,要是他每套房子出租都亲自跟住户打交道,那他真的分身乏术!这时候他找来了中介,由中介负责跟住户打交道,房东不管也不过问,只管负责把房间钥匙交给中介,住户找中介租房子,由中介跟住户完成看房、签合同、收房租。下面是栗子的代码实现:

代理者与被代理者共同实现的接口(房东跟中介的共同目的)

/**
 * 静态代理模型
 * */
public interface  Rent {
    void rentHouse();   //出租房子
}

被代理者(房东)

/**
 *  静态代理模型:
 * (房东)真实对象
 * */
public class Landlord implements Rent {
    public void rentHouse() {
        System.out.println("房东出租房子~~~");
    }
}

代理者(中介)

/**
 * 静态代理模型:
 * (中介)代理人
 * 代理对象可以更加专注于业务,扩充功能
 * */
public class Agent implements Rent{
    private Landlord landlord;  //包含真实对象

    public Agent(Landlord landlord) {
        this.landlord = landlord;
    }

    public void setLandlord(Landlord landlord) {
        this.landlord = landlord;
    }

    public Agent() {
    }

    public void rentHouse() {   // 可以在该方法中调用其他方法,扩展功能!
        pick(); //看房
        landlord.rentHouse();   //调用真实对象的出租房方法
        charge();   //收中介费
        sign(); // 签租房合同
    }
    public void pick(){
        System.out.println("中介带你看房!");
    }
    public void charge(){
        System.out.println("中介收取中介费!");
    }
    public void sign(){
        System.out.println("签租房合同!");
    }
}

住户租房(真实调用者)

/**
 * 静态代理模型:
 * (用户去租房)使用者
 * */
public class Renter {
    public static void main(String[] args) {
        Landlord landlord = new Landlord();
        Agent agent = new Agent();
        agent.setLandlord(landlord);
        agent.rentHouse();
    }
}

应用场景:

  • 有时候我们需要对前辈的代码进行维护,但由于代码又臭又长,直接去修改前辈的代码是比较痛苦的,也可能影响到现有的业务逻辑,显然是非常不明智选择,这时候我们为这些代码编写一个代理类,我们自己编写的代理类中扩充我们所需要的业务功能,在代理类中去调用前辈的核心代码即可.(当然使用spring的AOP可以完美解决这个问题!)
  • 有时候我们希望核心逻辑业务跟辅助业务耦合性不要那么强时,让被代理者专注于核心(通用)业务,代理者根据被代理着定制化辅助业务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值