23种设计模式-静态代理

笔记 / 2021-03-03

问题

房东想出租房子,但是不想参与租房的这个过程。
中介诞生了,中介就是代理端。

思路

通过接口规定出租行为Rentable

Rentable.java

public interface Rentable {
    void rent();
}

房东出租行为实现Rentable接口

Host.java


@Component
public class Host implements  Rentable{
    @Override
    public void rent() {
        System.out.println("房东:我要出租房子");
    }
}

中介也实现Rentable接口

Proxy.java

@Component
public class Proxy implements Rentable{
    // 代理房东
    private final Host host;

    @Autowired
    public Proxy(Host host) {
        this.host = host;
    }

    @Override
    public void rent() {
        before();
        host.rent();
        after();
    }
    // 扩展功能
    private void before(){
        System.out.println("看房 签合同");
    }

    private void after(){
        System.out.println("钱到手");
    }
}

测试

public class StaticProxyTest {
    @Test
    public void test(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        Proxy bean = context.getBean(Proxy.class);
        bean.rent();
    }
}

看房 签合同
房东:我要出租房子
钱到手

优点

  • 横向扩展
  • 方便管理

缺点

  • 一个代理类就要求有一个被代理的类
  • 代码急剧膨胀 形成灾难