【设计模式】结构型模式——代理模式

文章目录

  • 结构型模式——代理模式
    • 一、定义
    • 二、模拟场景
    • 三、实现
    • 四、UML图
    • 五、代理模式使用场景
    • 六、总结
      • 优点
      • 缺点
    • 七、与其他模式的关系

结构型模式——代理模式

一、定义

代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。

二、模拟场景

之前写的场景不给过,只好删掉了
简单来说,就是我们不能做某种事情,找个代理人帮我们去做。

三、实现

1、服务接口。
代理必须遵循该接口才能伪装成服务对象。

package com.atmae.proxy;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Description:
 */
public interface GoogleSubject {
    /**
     * gg服务器
     */
    void doWork();
}

2、服务类。
提供了一些实用的业务逻辑。 比如访问gg

package com.atmae.proxy;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Description:
 */
public class MySubject implements GoogleSubject{
    @Override
    public void doWork() {
        System.out.println("Google!");
    }
}

3、代理类。
代理类包含一个指向服务对象的引用成员变量。 代理完成其任务(比如 访问gg)后会将请求传递给服务对象。

package com.atmae.proxy;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Description:
 */
public class HKProxy implements GoogleSubject {
    private MySubject subject;

    public HKProxy(MySubject subject) {
        this.subject = subject;
    }

    @Override
    public void doWork() {
        subject.doWork();
    }
}

4、客户端
能通过同一接口与服务代理进行交互, 所以可在一切需要服务对象的代码中使用代理。

package com.atmae.proxy;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Description:
 */
public class Client {
    public static void main(String[] args) {
        HKProxy proxy=new HKProxy(new MySubject());
        proxy.doWork();
    }
}

四、UML图

【设计模式】结构型模式——代理模式_第1张图片

五、代理模式使用场景

例如创建某个对象开销很大,可以在访问此对象时加一个代理,用代理访问此对象。

  • 延迟初始化 (虚拟代理)。
  • 访问控制 (保护代理)
  • 记录日志请求 (日志记录代理)
  • 缓存请求结果 (缓存代理)

六、总结

优点

  • 可以在客户端毫无察觉的情况下控制服务对象
  • 开闭原则。 你可以在不对服务或客户端做出修改的情况下创建新代理

缺点

  • 因为需要新建许多类,代码可能会变得复杂。

七、与其他模式的关系

  • 与装饰模式的关系 ★
    代理模式能为对象提供相同的接口, 装饰模式则能为对象提供加强的接口

你可能感兴趣的:(设计模式,设计模式,软件工程,代理模式,java)