• 设计模式之代理模式


    设计模式之代理模式

    what:什么是代理模式

    为其他对象提供一种代理以控制对这个对象的访问

    why:为什么要使用代理模式

    中介隔离:在某些情况下,一个客户端不想或不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口

    开闭原则,增加功能:此外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要在修改委托类,符合代码的开闭原则

    日常开发中,代理类主要负责为委托类预处理消息、过滤消息、并把消息发送给委托类,以及时候对返回结果的处理等。

    代理类本身并正真实现服务,而是通过调用委托类的相关方法,来提供特定的服务。真正的服务还需由委托类来实现,但可以在业务功能执行的前后加入公共的服务,例如我们可以加一些缓存、日志这些功能

    请添加图片描述

    how代理模式实现原理

    代理模式主要包含三个角色,即抽象主题角色(subject),委托类角色(delegate,被代理角色)以及代理类角色(proxy)

    1、代理模式实现方式?

    静态代理和动态代理

    静态代理实现

    静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。

    所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

    1. 继承方式
    2. 实现接口方式
    基于接口的实现方式

    1、抽象主题角色

    public interface OrderService {
       
    void order();
    }
    
    • 1
    • 2
    • 3
    • 4

    2、委托类

    public class OrderServiceImpl implements OrderService {
       
    	public void order() {
       
    		System.out.println("用户下单操作..");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、代理类

    public class OrderServiceProxy implements OrderService {
       
    /**
    * 代理对象
    */
    private OrderService proxiedOrderService;
    public OrderServiceProxy( OrderService orderService) {
       
    	this.proxiedOrderService=orderService;
    }
    	public void order() {
       
    		System.out.println("日志收集开始..");
    		proxiedOrderService.order();
    		System.out.println("日志收集结束..")
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    #AcWing-从尾到头打印链表
    什么是大数据平台?
    初等数论总结
    Java之运算符(4)
    leetcode_1155 掷骰子等于目标和的方法数
    【MySQL】内置函数
    图灵完备游戏:信号计数 解法记录
    【JavaSE】抽象类和接口重点语法知识汇总(附有代码)
    [源码解析] TensorFlow 分布式环境(5) --- Session
    数字人技术在直播场景下的应用
  • 原文地址:https://blog.csdn.net/zhangshuai66/article/details/127658617