【设计模式】代理模式 详解

Youzg Logo

基本概念:

替代一个对象去完成某个功能
可以在此过程中对原功能做一些修饰


相当于中介

为什么要学习 代理模式?

因为代理模式是spring框架的AOP机制 的底层


分类:

静态代理:

使用步骤:

使用步骤

  1. 功能接口
  2. 实体类
  3. 代理类
  4. 客户端类调用代理类的某方法,来间接访问实体类的某方法

好处:

  • 可以是实体类功能更加纯粹
    不用去增加一些公共的业务功能
  • 公共业务交给代理角色。实现了业务的分工
  • 公共业务拓展时,方便集中管理

缺点:

一个实体类需要一个代理对象,所需代码量巨大


那么,在这里,本人来通过个小例子展示下 静态代理模式

小例子 —— 客户租房问题:

首先,本人来给出一个 租房接口:

package edu.youzg.proxy_study.core;

/**
 * @Author: Youzg
 * @CreateTime: 2020-04-29 11:53
 * @Description:带你深究Java的本质!
 */
public interface Rent {
    public void rentHouse();
}

现在,本人来给出一个房东实体类:

package edu.youzg.proxy_study.core;

/**
 * @Author: Youzg
 * @CreateTime: 2020-04-29 11:54
 * @Description:带你深究Java的本质!
 */
public class Landlord implements Rent{

    @Override
    public void rentHouse() {
        System.out.println("房东租房");
    }

}

对于上面的类,本人来给出一个 中介代理类:

package edu.youzg.proxy_study.core;

/**
 * @Author: Youzg
 * @CreateTime: 2020-04-29 11:58
 * @Description:带你深究Java的本质!
 */
public class Proxy implements Rent{
    private Landlord landlord;

    public Proxy() {
    }

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

    // 代理新增的方法
    public void checkHouse() {
        System.out.println("代理带客户看房");
    }

    public void signContract() {
        System.out.println("代理与客户签合同");
    }

    public void agencyFee() {
        System.out.println("代理收取中介费");
    }

    @Override
    public void rentHouse() {
        checkHouse();
        agencyFee();
        System.out.println("代理找房东");
        signContract();
        landlord.rentHouse();
    }

}

最后,本人来给出一个客户端测试类:

package edu.youzg.proxy_study.core;

/**
 * @Author: Youzg
 * @CreateTime: 2020-04-29 11:56
 * @Description:带你深究Java的本质!
 */
public class Client {

    public static void main(String[] args) {
        // 房东要出租房屋
        Landlord landlord = new Landlord();
        // 中介帮房东出租房屋
        Proxy proxy = new Proxy(landlord);

        //客户只能通过中介租房
        proxy.rentHouse();
    }

}

现在,本人来展示下运行结果:
运行结果 展示


动态代理:

请观看本人博文 —— 《详解 动态代理》


posted @ 2020-04-29 12:17  在下右转,有何贵干  阅读(63)  评论(0编辑  收藏  举报