• 03. 01- 代理模式(Proxy)


    1. 概述

    由于某些原因需要给某对象提供一个代理以控制该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介.

    1.1 结构

    代理模式分为三个角色

    1. 抽象主题类 : (subject)

    通过接口或抽象类声明真实主题和代理对象实现的业务方法

    1. 真实主题类 : (real subject)

    实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象

    1. 代理类 : (proxy)

    提供了与真实主题相同的接口,内部含有真实主题的引用,可以访问,控制或扩展真实主题的功能



    2. 案例

    • 例子 : 火车站卖票

    火车站可以卖票,但是去买票比较麻烦,比如人多,地方远
    可以招火车票代售点买票,人少,距离近
    火车站 : 目标对象 . 真实主题类 (real subject)
    代售点 : 代理对象 . 代理类 (proxy)

    在这里插入图片描述


    1. 抽象主题 : 声明业务

    声明卖票的业务

    // 抽象主题
    public interface SellTickets {
        public void sellTicket();
    }
    
    • 1
    • 2
    • 3
    • 4

    1. 真实主题类 : 实现具体的业务

    实现了具体的业务, 有没有余票, 多少钱一张,等等

    // 真实主题
    public class TrainStation implements SellTickets {
        @Override
        public void sellTicket() {
            System.out.println("火车站卖票");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1. 代理 : 客户访问的对象,

    自身不具备真正的卖票功能, 但我后面有火车站,
    你找我买票, 我找火车站买票.
    火车站给我票, 我给你票

    // 代理  , 持有真实对象 火车站 , 调用真实对象的方法
    public class ProxyPoint implements SellTickets{
    
        private TrainStation trainStation = new TrainStation();
        @Override
        public void sellTicket() {
        // 可以扩展功能 , 加钱...
            System.out.println("售票点代售火车票,方便,就是要收中介费");
            trainStation.sellTicket();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    1. 客户 : 访问代理对象
    // 客户访问 代理对象 --> 真实对象 --> 调用卖票的方法
    ProxyPoint proxyPoint = new ProxyPoint();
            proxyPoint.sellTicket();
    
    • 1
    • 2
    • 3

    3. 优缺点

    • 优点
    1. 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用
    2. 代理对象可以扩展目标对象的功能
    3. 代理模式将客户端与目标对象分离,在一定程度上降低了系统的耦合度
    4. 开闭原则 : 可以再不对服务或客户端做出修改的情况下创建新代理
    • 缺点

    增加了系统的复杂度


  • 相关阅读:
    ORB-SLAM3算法学习—Frame构造—基于SAD滑窗的双目特征匹配
    UG客户端配置许可模块绑定包
    智能园区三维可视化管理系统方案及优势开发
    Linux学习笔记15 - 多线程编程(二)
    常用的代码模板;自定义模板
    双字单字拆分/合并操作(博途SCL源代码)
    Java数据结构之二分搜索树(BST)
    【语义分割 01】Open MMLab介绍
    分布式 PostgreSQL 集群(Citus)官方示例 - 实时仪表盘
    你必须要知道CNN模型:ResNet残差网络
  • 原文地址:https://blog.csdn.net/squallmouse/article/details/126105736