码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java 实现代理模式


    代理模式(Proxy Pattern)是一种结构型设计模式,它允许一个对象(代理对象)充当另一个对象(被代理对象)的接口,以控制对该对象的访问。代理模式通常用于以下情况:

    1. 远程代理:代理对象在不同的地址空间中,可以代理远程对象的访问。
    2. 虚拟代理:代理对象用于控制创建昂贵对象的方式,只有在需要时才创建真正的对象。
    3. 保护代理:代理对象用于控制对另一个对象的访问权限。
    4. 智能代理:代理对象用于在访问另一个对象时添加额外的功能,如引用计数、懒加载等。

    在Java中,代理模式通常通过创建代理类来实现。以下是一个简单的Java示例,演示如何实现代理模式:

    首先,定义一个接口 Image,表示被代理对象的接口:

    public interface Image {
        void display();
    }
    
    • 1
    • 2
    • 3

    然后,创建一个具体的类 RealImage,实现了 Image 接口:

    public class RealImage implements Image {
        private String filename;
    
        public RealImage(String filename) {
            this.filename = filename;
            loadFromDisk();
        }
    
        private void loadFromDisk() {
            System.out.println("Loading image: " + filename);
        }
    
        @Override
        public void display() {
            System.out.println("Displaying image: " + filename);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    接下来,创建一个代理类 ProxyImage,也实现了 Image 接口,但在 display 方法中控制对 RealImage 对象的访问:

    public class ProxyImage implements Image {
        private RealImage realImage;
        private String filename;
    
        public ProxyImage(String filename) {
            this.filename = filename;
        }
    
        @Override
        public void display() {
            if (realImage == null) {
                realImage = new RealImage(filename);
            }
            realImage.display();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    现在,我们可以使用代理模式来控制对图像对象的访问:

    public class ProxyPatternDemo {
        public static void main(String[] args) {
            // 创建代理对象
            Image image = new ProxyImage("image.jpg");
    
            // 第一次访问,加载并显示图像
            image.display();
    
            // 第二次访问,不需要重新加载,直接显示图像
            image.display();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这个示例中,ProxyImage 作为代理对象控制了对 RealImage 对象的访问。如果图像已经加载过,代理对象不会重新加载图像,而是直接显示图像。这种方式可以提高性能并延迟对象的创建(虚拟代理)。

    代理模式是一种非常有用的设计模式,它可以帮助控制对对象的访问,并添加额外的功能。在实际应用中,代理模式可以用于实现缓存、延迟加载、安全控制等方面。

  • 相关阅读:
    nginx + nginx-rtmp-module + springboot 搭建直播流服务器实现推流、拉流实时直播功能
    【Windows 11】安装 Android子系统 和 Linux子系统
    从0开始python学习-22.selenium 常见键盘的操作
    java毕业设计基于精细化考核的离散数学课程教学目标达成系统Mybatis+系统+数据库+调试部署
    ubuntu20安装docker、redis、mysql及部署net6应用
    2023年中国纯棉纱行业现状及发展前景分析[图]
    Dijkstra算法求最短路
    车道线检测laneatt算法实战CULane Datasets、Tusimple数据集——安装运行训练步骤
    数据库定时备份winserver2012篇
    <sa8650>qcxser 之 QCarCam 6.X API介绍 (第一部分)
  • 原文地址:https://blog.csdn.net/sunyuhua_keyboard/article/details/132672981
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号