【了解一下静态代理与动态代理】-二.静态代理

在静态代理中,我们找了一个中介A来帮忙找房子。中介A提供了一系列的服务,比如筛选房源、安排看房、签约等。这个中介的流程是固定的,我们每次找中介A租房的时候,中介A都按照它们规定的流程执行。

1.类比说明:

  • 我们(Renters,租房者):客户,想要租到合适的房子。
  • 房东(Landlord,真实的出租者):拥有房源,真实的目标对象。
  • 中介A(LandlordProxy):静态代理角色,由于我们每次都找同一家中介,这家中介在编译时就明确了自己的代理流程,不会临时调整。

2.静态代理流程:

  1. 我们找到固定的中介A,希望租房。
  2. 中介A开始按固定流程代理我们完成租房:筛选房源、安排带看、签合同等。
  3. 我们通过中介A租到了房子。

3.静态代理的缺点:
如果我们之后需要不同的服务,比如希望找到不收中介费的中介B,又或者找专门提供短租的中介C,那我们就得找不同的中介,并为每个中介创建单独的代理对象,增加了复杂度,不够灵活。

对上述场景用静态代理代码实现:
假设有一个房东类和一个中介代理类,静态代理需要手动创建代理类来完成租房的代理服务。

public interface Rent {
    // 定义租房接口
    void rentHouse();
}

/**
 * 房东A(真实的出租者),实现租房接口
 */
public class LandlordA implements Rent {
    @Override
    public void rentHouse() {
        System.out.println("房东A待出租的房子");
    }
}

/**
 * 中介A
 */
public class LandlordAProxy implements Rent {

    // 中介有房东信息
    private final LandlordA landlordA = new LandlordA();

    @Override
    public void rentHouse() {
        System.out.println("中介带租客看房源信息");

        // 调用房东的租房方法
        landlordA.rentHouse();

        System.out.println("中介带我们跟房东处理租赁合同");
    }
}

/**
 * 我们(打工人):租房者
 */
public class Renters {

    public static void main(String[] args) {

            System.out.println("我是租客,找到中介..");

            // 创建代理
            LandlordProxy agency = new LandlordProxy();

            // 通过代理租房
            agency.rentHouse();
    }
}

输出结果:

  • 我是租客,找到中介…
  • 中介带租客看房源信息
  • 房东A待出租的房子
  • 中介带我们跟房东处理租赁合同

缺点就是我想换中介了,又得写一套静态代理逻辑,代码量大。

上一篇:Ubuntu中VSCode以sudo开始GDB调试C程序方法


下一篇:apisix的原理及作用,跟spring cloud gateway有什么区别?