结构型-代理模式(Proxy Pattern)

这篇具有很好参考价值的文章主要介绍了结构型-代理模式(Proxy Pattern)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

代理模式和适配器模式有什么区别?下面用两个示例来说明

适配器模式:假设你在家里有一个电源插座,但是你的笔记本电脑的电源线的插头是美国标准的,无法直接插到家里的电源插座中。这时,你可以使用一个适配器来解决这个问题。

代理模式:假设你家里有一个保姆,你不想让保姆直接接触你的贵重物品,但是你需要让保姆帮你照顾这些物品。这时,你可以使用一个代理来解决这个问题。

概述

代理模式是一种结构型设计模式,它使得代理对象可以控制对实际对象的访问。在代理模式中,代理对象通过持有对实际对象的引用,来代替实际对象进行操作。

代理对象对客户端隐藏了实际对象的细节,并可以在调用实际对象之前或之后执行一些额外的操作,如权限验证、缓存数据、对请求进行转发等。

示例一

以保姆保管贵重物品为例。

定义一个 Nanny 接口,表示保姆的行为:

public interface Nanny {
    void takeCareOfValuables();
}

创建一个具体的 NannyImpl 类来实现 Nanny 接口,表示真正的保姆:

public class NannyImpl implements Nanny {
    @Override
    public void takeCareOfValuables() {
        System.out.println("保姆正在照顾贵重物品");
    }
}

创建一个代理类 NannyProxy 来控制对保姆的访问,并在访问时添加额外的逻辑。例如,我们可以在保姆访问贵重物品之前,先记录下保姆的行为:

public class NannyProxy implements Nanny {
    private Nanny nanny;

    public NannyProxy(Nanny nanny) {
        this.nanny = nanny;
    }

    @Override
    public void takeCareOfValuables() {
        System.out.println("代理保姆正在记录行为");
        nanny.takeCareOfValuables();
    }
}

在客户端代码中使用代理模式来控制对保姆的访问:

public class Main {
    public static void main(String[] args) {
        // 创建真正的保姆对象
        Nanny nanny = new NannyImpl();

        // 创建代理保姆对象
        Nanny proxy = new NannyProxy(nanny);

        // 通过代理保姆来访问贵重物品
        proxy.takeCareOfValuables();
    }
}

运行结果:

代理保姆正在记录行为
保姆正在照顾贵重物品

示例二

假设我们有一个远程文件下载器,负责从远程服务器下载文件。为了增强下载器功能,我们可以使用代理模式来创建一个下载器的代理。

首先定义一个远程文件下载器的接口:

public interface FileDownloader {
    void download(String url);
}

然后实现实际的远程文件下载器:

public class FileDownloaderImpl implements FileDownloader {
    @Override
    public void download(String url) {
        // 实际的下载逻辑,省略
        System.out.println("Downloading file from " + url);
    }
}

接下来定义一个文件下载代理:

public class FileDownloaderProxy implements FileDownloader {
    private FileDownloaderImpl fileDownloader;

    @Override
    public void download(String url) {
        // 在下载文件之前进行一些额外的操作
        System.out.println("Before downloading file");
        
        // 延迟加载实际文件下载器
        if (fileDownloader == null) {
            fileDownloader = new FileDownloaderImpl();
        }
        
        // 调用实际文件下载器的方法
        fileDownloader.download(url);
        
        // 在下载文件之后进行一些额外的操作
        System.out.println("After downloading file");
    }
}

客户端代码可以通过文件下载代理来下载文件,而无需直接访问实际下载器:

public class Client {
    public static void main(String[] args) {
        FileDownloader downloader = new FileDownloaderProxy();
        downloader.download("https://example.com/file.txt");
    }
}

运行结果:

Before downloading file
Downloading file from https://example.com/file.txt
After downloading file 文章来源地址https://www.toymoban.com/news/detail-612917.html

到了这里,关于结构型-代理模式(Proxy Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++设计模式结构型之代理模式

    一、概述     代理模式是一种结构型模式,在很多不同的场合具有广泛的分类和应用。其主要实现的思想是在客户端和真正要访问的对象之间引入一个 代理对象(间接层),于是,以往客户端对真正对象的访问现在变成了通过代理对象进行访问,代理对象在这里起到了一个

    2024年02月13日
    浏览(42)
  • 【Java 设计模式】结构型之代理模式

    代理模式(Proxy Pattern)是一种结构型设计模式, 它允许通过一个代理对象控制对其他对象的访问 。代理模式在访问对象时引入了一定程度的间接性,使得可以在访问对象前后进行一些额外的操作。在本文中,我们将深入研究Java中代理模式的定义、结构、使用场景以及如何在

    2024年01月21日
    浏览(47)
  • 结构型设计模式之代理模式【设计模式系列】

    C++技能系列 Linux通信架构系列 C++高性能优化编程系列 深入理解软件架构设计系列 高级C++并发线程编程 设计模式系列 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reali

    2024年02月16日
    浏览(48)
  • 设计模式-04.01-结构型-代理&桥接&装饰器&适配器

    创建型模式比较好理解,后面的结构型和行为型设计模式不是那么好理解。如果遇到不好理解的设计模式,我一般会在开头举比较简单的Demo案例来帮助理解。 前面几节,我们讲了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对

    2024年02月09日
    浏览(58)
  • 设计模式- 代理模式(Proxy Pattern)结构|原理|优缺点|场景|示例

                                        设计模式(分类)        设计模式(六大原则)        创建型(5种)         工厂方法         抽象工厂模式        单例模式        建造者模式        原型模式     结构型(7种)      

    2024年04月24日
    浏览(42)
  • 结构型模式(Structural Pattern)

    模式介绍 结构型模式(Structural Pattern)的主要目的就是 将不同的类和对象组合在一起,形成更大或者更复杂的结构体 。该模式并不是简单地将这些类或对象摆放在一起,而是要 提供它们之间的关联方式 。不同的结构型模式从不同的角度来组合类或对象,它们尽可能满足各

    2024年02月03日
    浏览(33)
  • (二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

    目录 1、组合模式(Composite Pattern)含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C++实现组合模式的简单示例(公司的OA系统) 1、组合模式(Composite Pattern)含义 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个

    2024年02月12日
    浏览(44)
  • (二)结构型模式:5、装饰器模式(Decorator Pattern)(C++实例)

    目录 1、装饰器模式(Decorator Pattern)含义 2、装饰器模式的UML图学习 3、装饰器模式的应用场景 4、装饰器模式的优缺点 5、C++实现装饰器模式的简单实例 1、装饰器模式(Decorator Pattern)含义 装饰模式(Decorator),动态地给一个对象添加一些额外地职责,就增加功能来说,装

    2024年02月12日
    浏览(41)
  • 设计模式--------结构型模式

    结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构

    2024年02月13日
    浏览(48)
  • 设计模式结构型——外观模式

    目录 什么是外观模式 外观模式的实现 外观模式角色 外观模式举例 外观模式类图 外观模式代码实现 外观模式的特点 优点 缺点 注意事项 应用场景 总结         外观模式(Facade Pattern):又叫作门面模式,归属于结构型模式。外观模式定义了提供了定义了一个统一的高层

    2024年02月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包