静态代理模式

HeJin大约 1 分钟Spring全家桶Spring入门

为什么要学习代理模式?因为这就是Spring AOP的底层!

代理模式的分类

  • 静态代理

  • 动态代理

静态代理

角色分析:

  • 抽象角色:一般会使用接口或者抽象类来解决
  • 真实角色:被代理的角色
  • 代理角色:代理真实角色。代理真实角色后,我们一般会做一些附属操作!
  • 客户:访问代理对象的人!

步骤:

接口(抽象角色)

package com.kuang.demo01;

/**
 * @author Administrator
 */
public interface Rent {

    /**
     * 出租房屋
     */
    public void rent();

}

真实角色

package com.kuang.demo01;

/**
 * @author Administrator
 * 房东
 */
public class Host implements Rent {

    public void rent() {
        System.out.println("房东要出租房子!");
    }
}

代理角色

package com.kuang.demo01;

/**
 * @author Administrator
 */
public class Proxy implements Rent {

    private Host host;

    public Proxy() {
    }

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

    /**
     * 帮房东租房子
     */
    public void rent() {
        seeHouse();
        host.rent();
        hetong();
        fare();
    }

    /**
     * 看房
     */
    public void seeHouse(){
        System.out.println("中介带你看房!");
    }

    /**
     * 签合同
     */
    public void hetong(){
        System.out.println("签租赁合同!");
    }

    /**
     * 收中介费
     */
    public void fare(){
        System.out.println("收中介费!");
    }

}

客户端访问代理角色

package com.kuang.demo01;

/**
 * @author Administrator
 */
public class Client {
    public static void main(String[] args) {
        //房东要出租房子
        Host host = new Host();
        /**
         * 代理,中介帮助房东租房子
         * 代理角色一般会有一些附属操作
         */
        Proxy proxy = new Proxy(host);
        /**
         * 你不用面对房东,直接找中介
         */
        proxy.rent();

    }
}

代理模式的好处

  • 1、可以使真实角色的操作更加纯粹!不用去关注一些公共的业务!
  • 2、公共业务也就交给代理角色!实现了业务的分工!
  • 3、公共业务发生扩展的时候,方便集中管理!

静态代理的缺点

一个真实角色就会产生一个代理角色!代码量会翻倍!开发效率变低!