结构型-代理模式(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日
    浏览(28)
  • 【Java 设计模式】结构型之代理模式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月13日
    浏览(37)
  • 设计模式之结构型模式

    本文已收录于专栏 《设计模式》   大话设计模式主要分为三部分,第一部分是创建型模式,第二部分是结构型模式,第三部分是行为型模式。至于为什么要分为这三部分,我的理解是创建型是用于创建对象的而结构型是发生在类与类之间的关系是比较宏观的,比如说组合

    2024年02月11日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包