c#设计模式-结构型模式 之 代理模式

news2024/9/28 15:29:01

前言        

        由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接 引用目标对象,代理对象作为访问对象和目标对象之间的中介。在学习代理模式的时候,可以去了解一下Aop切面编程AOP切面编程_aop编程_爱吃香蕉的阿豪的博客-CSDN博客,Aop底层实现通常使用代理模式

代理(Proxy)模式分为三种角色:

  1. 抽象角色(Subject)类: 通过接口或抽象类声明真实角色和代理对象实现的业务方法。
  2. 真实角色(Real Subject)类: 实现了抽象角色中的具体业务,是代理对象所代表的真实对 象,是最终要引用的对象。
  3. 代理(Proxy)类 : 提供了与真实角色相同的接口,其内部含有对真实角色的引用,它可以访 问、控制或扩展真实角色的功能。

举例

我们假设一种场景,电脑中有一个计算方法,传两个数字进去,得出一个合计,但是现在需要添加一个整数计算器,要把传进去的小数去除小数部分,只计算整数部分,但是原来的sum方法可能在其他地方还需要使用,因此不能修改原来的方法,我们使用代理模式来实现这一功能。

抽象角色

创建一个抽象角色计算机,里面有一个计算方法

public interface IComputer
{
    void calculator(double a, double b);
}

真实角色

实现类sum,对传进来的两个数进行相加

public class sum : IComputer
{
    public void calculator(double a, double b)
    {
        Console.WriteLine(a + b);
    }
}

代理类 ProxySum

在代理类中,直接引用了真实角色sum,不过在这之前先对参数进行了去小数处理

public class ProxySum : IComputer
{
    private sum sum = new sum();

    public void calculator(double a, double b)
    {
        a = Math.Floor(a);
        b = Math.Floor(b);
        sum.calculator(a, b);
    }
}

测试

先使用原来的真实角色sum,传入两个小数

    public static void Main(string[] args)
    {
        var sum = new sum();
        sum.calculator(1.111,3.999);
    }

得到结果5.11

 

 然后我们再使用代理类proxySum

    public static void Main(string[] args)
    {
        var proxySum = new ProxySum();
        proxySum.calculator(1.111,3.999);
    }

 得到的结果是去除小数后相加的结果

 总结

优点:

代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;

代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;

缺点: 增加了系统的复杂度;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编程练习(2)

一.选择题 第一题: 考察转义字符和strlen函数求解字符串长度 进一步在VS中可以智能看出哪些字符是转义字符: 因此本体答案选择B 第二题: 本体较为简单,宏定义了三个数N,M,NUM,N值为2,M值为3,因此NUM值为8,…

iTOP-RK3588开发板安装TFTP服务端

首先在 ubuntu 中执行以下命令安装 TFTP 服务: apt-get install tftp-hpa tftpd-hpa 安装完成以后创建 TFTP 服务器工作目录,并对 TFTP 的服务配置文件进行修改,具体步骤如下: 输入以下命令在家目录创建 tftpboot 文件夹,如下图所示&#x…

LeetCode[274]H指数

难度:Medium 题目: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指…

SAP 打印条形码

SAP 打印条形码 一 字体维护 1.SE73 2. 3. 4. 5. 6. 7. 二将第一步创建的字体应用到样式 1.SMARTFORMS 2. 三将第二步创建的字符格式应用到表单 1.SMARTFORMS

【24择校指南】中国海洋大学计算机考研考情分析

中国海洋大学(B) 考研难度(☆☆☆☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各科目及专业考情分析。 正文986字,含表格预计阅读:3分钟。 2023考情概况 中…

C语言好题解析(二)

目录 递归类型例题1例题2例题3例题4例题5例题6 递归类型 例题1 根据下面递归函数:调用函数Fun(2),返回值是多少( )int Fun(int n) {if (n 5)return 2;elsereturn 2 * Fun(n 1); } A.2 B.4 C.8 D.16【答案】 D 【分析】 …

深入理解Java中的Object类的equals()和hashCode()

文章目录 1. equals()方法和hashCode()方法的联系1.1 equals()方法1.2 hashCode()方法 2. equals()、hashCode()和集合类的关系2.1 equals()方法的影响2.2 hashCode()方法的影响 3. 示例:重写equals()和hashCode()结论 🎉欢迎来到Java面试技巧专栏~深入理…

2023河南萌新联赛第(六)场:河南理工大学

目录 A 简单的异或 题目: 解析: B 这是dp题吗 题目链接:https://ac.nowcoder.com/acm/contest/63602/B 解析: D 买饼干的小Y 题目:https://ac.nowcoder.com/acm/contest/63602/D 解析: E 不爱吃早…

【jwt】JWT原理,JWT是用来解决什么问题的,如何自定义生成JWT数据,并且实现jwt数据的解码

JWT: JSON Web Token 1. jwt概述 用户登录成功后,服务端 如何知道客户端的每次请求对应的是哪个用户呢?怎么做:目前有两种方式实现. 1.1. 一是通过sessionId的方式,登录成功后服务端返回sessionId给客户端&#xff0…

【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)

处理类别数据 🌱简要理解处理类别数据的重要性☘️类别数据的分类☘️方便研究——用pandas创建包含多种特征的数据集🍀映射有序特征🍀标称特征标签编码🍀标称特征的独热编码🌱独热编码的优缺点 🌱简要理解…

爬虫逆向实战(八)--猿人学第十五题

一、数据接口分析 主页地址:猿人学第十五题 1、抓包 通过抓包可以发现数据接口是api/match/15 2、判断是否有加密参数 请求参数是否加密? 查看“载荷”模块可以发现有一个m加密参数 请求头是否加密? 无响应是否加密? 无cook…

Cat(3):客户端集成—简单案例

接下来编写一个简单的springboot与Cat整合的案例 1 新建springboot项目 首先创建一个Spring Boot的初始化工程。只需要勾选web依赖即可。 2 添加 Maven 添加依赖 <dependency><groupId>com.dianping.cat</groupId><artifactId>cat-client</artifa…

拉丁方设计资料的方差分析(SPSS版+SAS版)

拉丁方设计&#xff08;Latin square design&#xff09;&#xff1a;实验研究中涉及一个处理因素和两个控制因素&#xff0c;每个因素的类别数或水平数相等&#xff0c;此时可采用拉丁方设计&#xff0c;将两个控制因素分别安排在拉丁方设计的行和列上。该设计类型仍为单因素方…

生信豆芽菜-oncoPredict预测药物的敏感性

网址&#xff1a;http://www.sxdyc.com/drugOncoPredict 1、数据准备 准备一个行为基因&#xff0c;列为样本的表达谱矩阵即可 2、选择训练集数据库&#xff0c;提交等待运行成功即可 3、结果 当然&#xff0c;如果不清楚数据是什么样的&#xff0c;可以选择下载我们的示…

无涯教程-Perl - tell函数

描述 此函数返回指定FILEHANDLE中读取指针的当前位置(以字节为单位)。如果省略FILEHANDLE,则它将返回上次访问的文件中的位置。 语法 以下是此函数的简单语法- tell FILEHANDLEtell返回值 此函数以字节为单位返回当前文件位置。 例 以下是显示其基本用法的示例代码,要检…

RTSP/Onvif视频服务器EasyNVR视频监控汇聚平台的实际应用介绍

一、方案背景 在新时代的背景下&#xff0c;公安情报指挥体系建设需要在情报指挥中心为基础&#xff0c;以实现“情报全面精准、指挥集成统一、勤务协同高效、舆情管控有力”的目标。通过建设情指勤舆一体化指挥调度平台&#xff0c;将情报指挥中心打造成社会治安防控体系的核…

2023国考(地市级)判断推理

题目 黑白块 例题 例题 例题 例题

数据库的事务隔离级别(脏读、不可重复读、幻读)

并发事务问题 read uncommitted&#xff0c;存在脏读、不可重复度、幻读 read committed&#xff0c;存在不可重复读、幻读 repeatable read(默认)&#xff0c;存在幻读 serializable&#xff08;串行化&#xff0c;序列化&#xff09;&#xff0c;都不存在 前提&#xff1…

Android内存泄漏总结和性能优化技巧

我们在开发安卓应用时&#xff0c;性能优化是非常重要的方面。一方面&#xff0c;优化可以提高应用的响应速度、降低卡顿率和提升应用流畅度&#xff0c;从而提升用户体验&#xff1b;另一方面&#xff0c;优化也可以减少应用的资源占用&#xff0c;提高应用的稳定性和安全性&a…

ExcelServer Excel服务器的使用

Excel服务器的搭建 见 一步搭建Excel服务器 1、以EXCEL文件作为模板 1.1 利用excel易于使用的方式创建模板&#xff0c;并设置编辑&#xff0c;只读&#xff0c;函数等恪。 2、利用设置模板的权限 2.1 设置角色权限,允许哪些角色可以编辑 3、查看汇总的数据