一,什么是C#设计模式?

代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问

二,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _12.代理模式
{
/// <summary>
/// 代理模式提供了一个中介控制对某个对象的访问。现实生活中,我们可能会用支票在市场交易中用来代替现金,支票就是账户中资金的代理。
/// 为其他对象提供一种代理,来帮助达到目的。
/// </summary>
class Program
{
static void Main(string[] args)
{
///中国人自己买菜
Event c = new Chinese();
c.DoSomeThing(); ///代理中国人去买菜
Event e = new Proxy();
e.DoSomeThing();
e.DoSomeThing();
}
}
/// <summary>
/// 抽象行为
/// </summary>
public abstract class Event
{
public abstract void DoSomeThing();
}
/// <summary>
/// 中国人
/// </summary>
public class Chinese : Event
{
/// <summary>
/// 本来中国人要去买菜
/// </summary>
public override void DoSomeThing()
{
Console.WriteLine("中国人,去买菜");
}
}
/// <summary>
/// 代理模式,第三方帮忙达到目的
/// 实现AOP
/// </summary>
public class Proxy : Event
{
private Chinese chinese = null;
private Chinese _chinese
{
get
{
if (this.chinese == null)
chinese = new Chinese();
return chinese;
}
}
/// <summary>
/// 2 AOP:日志代理 异常代理 延迟代理 权限代理 单例代理 缓存代理
/// </summary>
public bool flag = false;
/// <summary>
/// 代理帮忙中国人去买菜
/// </summary>
public override void DoSomeThing()
{ Console.WriteLine("DoSomeThing start...");
////AOP代理模式添加异常
try
{
if (flag)
{
_chinese.DoSomeThing();
}
if (!flag)
{
///DoSomeThing,可以在这里实现AOP(日志代理 异常代理 延迟代理 权限代理 单例代理 缓存代理)
////初始化AOP写日志,AOP写缓存
Console.WriteLine("初始化AOP写日志");
Console.WriteLine("初始化AOP写缓存");
}
flag = true;
}
catch (Exception ex)
{ }
Console.WriteLine("DoSomeThing end...");
}
}
}

三,如上很简单的代码,本来中国人去买菜,但这时是由代理帮忙买菜了,

代理模式由三部分组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。(如上:Event接口)
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。(如上:Proxy)
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。(如上:Chinese)
四,代理模式和装饰者模式的区别:
1》代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行。而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能。
2》代理模式使用到极致开发就是AOP,在百科中AOP的解释:为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
3》AOP底层,就是采用动态代理模式实现的

C#设计模式:代理模式(Proxy Pattern)的更多相关文章

  1. 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释

    代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...

  2. 设计模式——代理模式(Proxy Pattern)

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...

  3. C#设计模式——代理模式(Proxy Pattern)

    一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...

  4. 设计模式 -- 代理模式 (Proxy Pattern)

    定义: 为其他对象提供一种代理以控制对这个对象的访问: 角色: 1,抽象主题类,(接口或者抽象类),抽象真实主题和代理的共有方法(如下Subject类): 2,具体实现的主题类,继承或者实现抽象主题类 ...

  5. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  6. 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  7. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...

  8. 代理模式(Proxy pattern)

    代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...

  9. 13.代理模式(Proxy Pattern)

    using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...

  10. c#设计模式之代理模式(Proxy Pattern)

    引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...

随机推荐

  1. css3 宽度百分比减去固定宽度 无效问题

    一定要注意中间横线的间距才有效果 正确 width: calc(50% - 10px); 错误 width:calc(50%-10px);

  2. React Native 之项目的启动

    运行项目有两种方法 1. 到根目录,执行 react-native run-ios 命令 会开启一个本地服务,加载jsbundle文件,然后是去index.js文件 import {AppRegist ...

  3. Javascript面试题解析

    Javascript的一些面试题让很多同学感到头疼,下面就根据兄弟连教育 )毕业学员面试遇到的面试题,给大家做一个简单的分享,希望对初入职场的你们有一些帮助:Javascript面试题解析. 第一题 ...

  4. php下载文件夹目录下的文件

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  5. [ethereum源码分析](5) 创建新账号

    前言 在上一章我们介绍了 ethereum运行开启console 的过程,那么在这一章我们将会介绍如何在以太坊中创建一个新的账号.以下的理解可能存在错误,如果各位大虾发现错误,还望指正. 指令分析 指 ...

  6. [CSP-S模拟测试]:简单的序列(DP)

    题目描述 从前有个括号序列$s$,满足$|s|=m$.你需要统计括号序列对$(p,q)$的数量. 其中$(p,q)$满足$|p|+|s|+|q|=n$,且$p+s+q$是一个合法的括号序列. 输入格式 ...

  7. 安装完Fedora 18后需要做的事情

    折腾了好久,在网上查看了好多资料,总算吧安装好的Fedora 18配置得差不多了,现在将过程记录下来,供以后查看用,同时也许还能帮助到和我遇到同一问题的朋友们,以后再有什么再继续添加吧. 一.添加 y ...

  8. Linux内核调试方法总结之Kprobes

    Kprobes [用途][参考kernel/Documentation/kprobes.txt帮助文档] Kprobes是一个轻量级内核调试工具,同时又是其他一些更高级的内核调试工具(如perf和sy ...

  9. CBAM: Convolutional Block Attention Module

    1. 摘要 作者提出了一个简单但有效的注意力模块 CBAM,给定一个中间特征图,我们沿着空间和通道两个维度依次推断出注意力权重,然后与原特征图相乘来对特征进行自适应调整. 由于 CBAM 是一个轻量级 ...

  10. 查看linux显卡序列

    1 lspci -vnn | grep VGA -A 12会输出显卡的硬件信息,第一行的第二个[]内是显卡的序列号2 在网站http://pci-ids.ucw.cz/read/PC/ 下方输入序列号 ...