前言

代理模式是结构型设计模式,主要是为其他对象提供一种代理以控制对这个对象的访问。


一、介绍

代理模式(Proxy Pattern)是一种常用的设计模式,属于结构型模式之一。它为另一个对象提供一个代替或占位符对象,以便控制对它的访问。代理模式中客户端不直接调用实际的对象,而是通过调用代理间接性的调用实际的对象。

二、详细分析

1.核心组成

  • Subject(抽象接口):定义了原始对象和代理对象的共同接口。

  • RealSubject(真实对象):被代理的真实对象,实现了抽象接口。

  • Proxy(代理对象):包含对真实对象的引用,并实现了与真实对象相同的接口,以便可以在任何时刻代替真实对象。

在这里插入图片描述

2.实现步骤

  1. 创建抽象接口;
  2. 创建真实对象并实现抽象接口;
  3. 创建代理对象并实现抽象接口,代理对象中引入真实对象;
  4. 创建测试类,调用代理对象方法以实现增强的目的。

3.代码示例

抽象接口

/**
 * Subject 抽象接口
 */
public interface RentingHouse {

    /**
     * 租房
     */
    void rentingHouse();

}

真实对象

/**
 * 房东
 * RealProject:真实的对象
 */
public class LandlordOrLandlady implements RentingHouse{
    @Override
    public void rentingHouse() {
        System.out.println("房东:我有一套在市中心120平米精装修二室一厅");
    }
}

代理对象

/**
 * 中介
 * Proxy:代理对象
 */
public class Intermediary implements RentingHouse{

    /**
     * 真实对象
     */
    private RentingHouse real = new LandlordOrLandlady();

    @Override
    public void rentingHouse() {
        real.rentingHouse();
        System.out.println("中介:线上租赁渠道");
        System.out.println("中介:线下门店开放");
        System.out.println("中介:全年无休,只为带你看房");
    }

}

测试类

    public static void main(String[] args) {
        RentingHouse intermediary = new Intermediary();
        intermediary.rentingHouse();
    }

结果
在这里插入图片描述

4.优缺点

优点

  • 可以在访问一个类时做一些控制,或增强一些功能;

  • 符合开闭原则,具有较好的灵活性和可扩展性。

缺点

  • 增加系统的复杂度和调用链路。

5.使用场景

  • 客户端不想直接访问实际的对象,或者访问实际的对象存在困难,通过一个代理对象来完成间接的访问;
  • 想在访问一个类时做一些控制,或者增强功能。

总结

本篇文章简单介绍了,代理模式的原理、优缺点和使用场景,并提供案例代码。正常代理模式又分为动态代理和静态代理,熟悉spring的同学应该知道,spring中使用了大量的动态代理,对此打算深入研究的同学可以去查阅动态代理和静态代理相关资料。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐