.NET 代理模式(一)基本概念
代理模式
代理模式,它是一种结构型的设计模式。
让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。
简单理解就是 客户端不会直接与实际实现类打交道,而是通过对实现类的进一步封装成代理类,该代理类不会改变实现类原本的功能(行为),只是在实现类的方法前后添加一些自定义行为用于记录。
参考下图:

代理模式的应用场景
代理模式的应用场景多种多样
比如:
- 虚拟代理:针对宝贵资源,可能比较消耗系统资源,可通过代理模式针对类型的初始化延迟到真正需要时进行加载,一般配合享元模式实现池化技术。
- 保护代理:需要满足一定条件的客户端(鉴权)才能够使用,可考虑使用保护代理,预防恶意程序使用此对象。
- 日志记录:需要记录代理对象执行前后的过程时间等等。
- 缓存代理:针对一些重复请求,考虑使用此模式。
- 动态代理:此模式一般依靠语言的反射特性,通过接口或继承方式,实现针对不同的被代理类,统一实现代理行为。
代码实现
public class ProxyPattern : MainClass
{
public abstract class AbstractSubject
{
public abstract void Operation();
}
public class RealSubject : AbstractSubject
{
public override void Operation()
{
Console.WriteLine("执行操作");
}
}
public class ProxySubject : AbstractSubject
{
private readonly AbstractSubject _subject;
public ProxySubject(AbstractSubject subject)
{
this._subject = subject;
}
private void BeforOperation()
{
Console.WriteLine("执行前的操作");
}
private void AfterOperation()
{
Console.WriteLine("执行后的操作");
}
public override void Operation()
{
BeforOperation();
_subject.Operation();
AfterOperation();
}
}
public override void Main()
{
AbstractSubject subject = new RealSubject();
AbstractSubject proxySubject = new ProxySubject(subject);
proxySubject.Operation();
}
}
.NET 中代理模式的应用场景
- Filter过滤器 针对MVC中提供不同类型的Filter的钩子事件,提供自定义的行为。
- Middle中间件 针对http的管道请求,可添加自定义管道节点,针对http的一些metadata数据进行个性化处理。
- HttpClient类 .NET Core Web项目中常用于进行HTTP请求和响应。在某些情况下,我们可能会使用代理来拦截、修改或者扩展HTTP请求和响应,例如添加身份验证、日志记录等。
- IOC容器动态代理,对容器内的实现类添加动态的代理行为。
- Repository模式 在应用程序中使用Repository模式时,Repository类通常充当数据访问层的代理,隐藏了数据访问的具体实现细节。我们可以在不直接与数据访问层交互的情况下,通过Repository类来访问数据。
参考链接
代理模式
设计模式-代理模式
C#设计模式(13)——代理模式(Proxy Pattern)
.NET 代理模式(一)基本概念的更多相关文章
- 软件设计模式之代理模式(JAVA)
貌似停笔了近半个月了,实在不该啊,新的一年,时刻让自己归零. Back To Zero,就从这篇文章拉开今年的序幕吧. 这篇文章准备介绍下有关代理模式的基本概念和静态代理.动态代理的优缺点及使用方法( ...
- Java描述设计模式(16):代理模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 在电商高速发展的今天,快递的数量十分庞大,甚至出现了快递代理行业,简单的说就是快递的主人没有时间收快递,会指定一个 ...
- 从静态代理,jdk动态代理到cglib动态代理-一文搞懂代理模式
从代理模式到动态代理 代理模式是一种理论上非常简单,但是各种地方的实现往往却非常复杂.本文将从代理模式的基本概念出发,探讨代理模式在java领域的应用与实现.读完本文你将get到以下几点: 为什么需要 ...
- Spring AOP系列(一)— 代理模式
Spring AOP系列(一)- 代理模式 AOP(Aspect Oriented Programming)并没有创造或使用新的技术,其底层就是基于代理模式实现.因此我们先来学习一下代理模式. 基本概 ...
- 代理模式详解:静态代理、JDK动态代理与Cglib动态代理
代理模式简介分类 概念 代理,是为了在不修改目标对象的基础上,增强目标方法的业务逻辑. 客户类需要执行的是目标对象的目标方法,但是真正执行的是代理对象的代理方法,客户类对目标对象的访问是通过代 ...
- Filter案例之敏感词过滤和代理模式
一.需求分析 二 .代理模式 1.概念 2.代码实现 代理对象可以强转为真实对象,即对应的接口类: 3.通过代理增强方法 其中,方法对象invoke真实对象,反射原理: 三.过滤敏感词汇案例代码实现 ...
- 代理模式_v1
代理模式 概念: 1.真实对象:要被代理的对象 2.代理对象 3.代理模式 : 代理对象代理真实对象,达到增强真实对象功能的作用 实现方式: 1.静态代理:有一个类文件描述代理模式 2.动态代理:在内 ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 设计模式--5.5 代理模式-通用代码及aop
1.通用代码 (1)Subjects package com.design.代理模式.通用代码; public interface Subject { void request(); } (2)Rea ...
- Java代理模式/静态代理/动态代理
代理模式:即Proxy Pattern,常用的设计模式之一.代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问. 代理概念 :为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委 ...
随机推荐
- #线段树合并、树上启发式合并#CF600E Lomsat gelral
题目 一棵树有\(n\)个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和 分析1 线段树合并,记录\(w,sum\)分别表示编号和以及颜色和,当颜色和相同时两个编号 ...
- #线段树#洛谷 2221 [HAOI2012]高速公路
题目 分析 首先把收费站之间化为点,那这样即是区间加和区间查询, 考虑求的应该是 \[\frac{\sum a[i]*(r-i+1)*(i-l+1)}{C(r-l+2,2)} \] 分子可以拆成 \[ ...
- HarmonyOS卡片刷新服务,信息实时更新一目了然
如今衣食住行娱乐影音等App占据了大多数人的手机,一部手机可以满足日常大多需求,但对需要经常查看或进行简单操作的场景来说,总需要用户点开App操作未免过于繁琐. 针对该问题, HarmonyOS SD ...
- C++调用Python-0:搭建环境
1.进入到Python安装目录 2.将Python安装目录中的 include 和 libs 文件夹放在 C++项目中 3.设置 附加包含目录 和 附加库目录.附加依赖项(python310_d.li ...
- JS启动Windows上的exe
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spark常见的问题以及解决方案
Spark为什么比Hadoop要快? Spark比hadoop快的原因,我认为主要是spark的DAG机制优于hadoop太多,spark的DAG机制以及RDD的设计避免了很多落盘的操作,在窄依赖的情 ...
- ping 介绍
前言 因为要整理网络这一块,所以打算先把概念写下.这节介绍ping的实现原理. 正文 先看一下图: 又没有发现和我们的icmp很像?对头.在icmp中,我写道:icmp有两种报文,一种是差错报文,一种 ...
- Java面试题:请谈谈Java中的volatile关键字?
在Java中,volatile关键字是一种特殊的修饰符,用于确保多线程环境下的变量可见性和顺序性.当一个变量被声明为volatile时,它可以确保以下两点: 内存可见性:当一个线程修改了一个volat ...
- 力扣1098(MySQL)-小众书籍(中等)
题目: 书籍表 Books: book_id 是这个表的主键 订单表 Orders: order_id 是这个表的主键.book_id 是 Books 表的外键. 问题你需要写一段 SQL 命令,筛选 ...
- 力扣620(MySQL)-有趣的电影(简单)
题目: 某城市开了一家新的电影院,吸引了很多人过来看电影.该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述. 作为该电影院的信息部主管,您需要编写一个 SQL查 ...