首页 > 其他分享 >设计模式 - 代理模式

设计模式 - 代理模式

时间:2025-01-03 16:13:21浏览次数:1  
标签:ServiceProxy 对象 Request 代理 模式 访问 设计模式 public

概述

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式通过引入一个代理对象来控制对原对象的访问,可以在不改变原对象的情况下扩展其功能。代理模式常用于延迟加载、访问控制、日志记录等场景。

结构

代理模式包含以下几个角色:

  1. 抽象主题(Subject):定义了代理类和真实类的公共接口。
  2. 真实主题(RealSubject):实现了抽象主题接口,表示代理所代表的真实对象。
  3. 代理(Proxy):实现了抽象主题接口,包含对真实主题对象的引用,并可以控制对真实主题的访问。

示例代码

假设我们有一个应用程序需要通过代理对象来控制对某个服务的访问,例如远程服务的访问控制。
代码地址

抽象主题

public interface IService
{
    void Request();
}

真实主题

public class RealService : IService
{
    public void Request()
    {
        Console.WriteLine("RealService: Handling request.");
    }
}

代理

public class ServiceProxy : IService
{
    private RealService _realService;
    private bool _isAuthorized;

    public ServiceProxy(bool isAuthorized)
    {
        _realService = new RealService();
        _isAuthorized = isAuthorized;
    }

    public void Request()
    {
        if (_isAuthorized)
        {
            Console.WriteLine("ServiceProxy: Authorizing request.");
            _realService.Request();
        }
        else
        {
            Console.WriteLine("ServiceProxy: Unauthorized request.");
        }
    }
}

客户端代码

class Program
{
    static void Main(string[] args)
    {
        IService authorizedProxy = new ServiceProxy(true);
        authorizedProxy.Request();

        IService unauthorizedProxy = new ServiceProxy(false);
        unauthorizedProxy.Request();
    }
}

应用场景

代理模式适用于以下场景:

  1. 远程代理:为一个对象在不同地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
  2. 虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
  3. 保护代理:控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。
  4. 智能指引:取代了简单的指针,它在访问对象时执行一些附加操作。

优缺点

优点

  • 控制对象访问:代理模式可以控制对真实对象的访问,增加了系统的安全性和灵活性。
  • 延迟加载:代理模式可以实现延迟加载,优化系统性能。
  • 日志记录:代理模式可以在访问真实对象时进行日志记录,便于调试和监控。

缺点

  • 增加系统复杂性:引入代理对象会增加系统的复杂性,特别是当代理层次过多时。
  • 性能开销:代理模式可能会增加一些额外的调用开销,影响系统性能。

标签:ServiceProxy,对象,Request,代理,模式,访问,设计模式,public
From: https://www.cnblogs.com/Tangtang1997/p/18650317

相关文章

  • 设计模式 - 享元模式
    概述享元模式(FlyweightPattern)是一种结构型设计模式,它通过共享大量细粒度对象来减少内存使用和提高性能。享元模式的核心思想是将对象的状态分为内部状态和外部状态,内部状态是可以共享的,而外部状态是可以变化的。通过共享内部状态,享元模式可以显著减少内存消耗。结构享元模式......
  • 设计模式 - 外观模式
    概述外观模式(FacadePattern)是一种结构型设计模式,它为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用。外观模式通过引入一个外观类,简化了复杂子系统的接口,减少了客户端与子系统之间的耦合,从而提高了系统的易用性和可维护性。结构外观模式包含以下几个角色:外观(Fa......
  • 设计模式 - 解释器模式
    概述解释器模式(InterpreterPattern)是一种行为型设计模式,它为某种语言定义其文法表示,并提供一个解释器来解释语言中的句子。解释器模式通过定义一个解释器类来解释语言中的句子,使得语言的文法和解释逻辑可以独立于具体的应用程序。解释器模式常用于开发编译器、脚本语言解析器等......
  • 设计模式 - 命令模式
    概述命令模式(CommandPattern)是一种行为型设计模式,它将请求封装成对象,从而使你可以用不同的请求对客户进行参数化。命令模式允许请求的发送者与接收者解耦,使得请求的发送者不需要知道请求的接收者是谁,也不需要知道如何处理请求。命令模式还支持请求的排队、记录日志以及撤销操作......
  • 设计模式 - 责任链模式
    概述责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式,它通过将请求沿着处理者链传递,直到有一个处理者处理它为止。责任链模式使得多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合。通过将请求的处理者连成一条链,责任链模式可以动态地指定处理......
  • 如何选择优质的SAP代理商:全面解析与策略指导
      在数字化转型的浪潮中,企业资源规划(ERP)系统已成为提升企业运营效率、优化资源配置的关键工具。SAP,作为全球领先的ERP解决方案提供商,其强大的功能和广泛的应用领域,深受众多企业的青睐。然而,SAP系统的成功实施和高效运行,离不开专业的SAP代理商的支持。本文将深入探讨SAP代理商......
  • 【安全就业】信息安全团队的角色分工与协作模式详解
    一、信息安全团队——数字世界的“守护者联盟”信息如空气般渗透到生活的每一个角落。从日常的网上购物、移动支付,到企业的核心商业机密、政府的关键决策数据,信息的安危牵动着各方的神经。不妨回顾一下热门影视作品,像《风暴舞》聚焦现代信息安全题材,主角们在都市丛林中与黑客......
  • PAC 代理
    前言在某些时候前端本地开发指定域名,我们本地需要启动一个有域名的服务,方便开发调试。例如:本地启动一个xxx.com的服务通常来说我们可以通过修改本地host来实现这一效果:前端本地开发指定域名接下来我们来看另一种方案:PAC代理1.编写PAC函数文件后缀为.pacproxy.pacf......
  • Java反射机制与动态代理
    软件开发中,灵活性与扩展性是非常重要的需求,而Java的反射机制与动态代理正是实现这些特性的强大工具。反射机制让程序在运行时能够检查和操作类的信息,而动态代理则为方法调用提供了一种灵活的拦截机制。本文将深入探讨这两种机制的概念、原理、应用场景,并通过具体示例展示它......
  • 火狐浏览器Firefox无法使用代理
    背景没用过arch,这次装了一个一键安装的arch发行版,自带的firefox。代理试了半天,不能使用,除非打开tun。情况火狐浏览器代理配置不生效,始终不使用系统代理或者自定义。默认是系统代理设置,是chromium都不需要配置。firefox这里手动配置代理,这个确定一直点不动,焦点会回到图上的......