一,什么是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. CobaltStrike + Metasploit 联动使用

    本节的知识摘要: 通过 beacon内置的 socks功能将本地 Msf直接代入目标内网 借助 CobaltStrike的外部 tcp监听器通过 ssh隧道直接派生一个 meterpreter到本地 ...

  2. sqlserver数据库脱机和分离的区别

    脱机和分离的区别: 分离和脱机都可以使数据库不能再被使用,但是分离后需要附加才能使用,而脱机后只需联机就可以用了. 附加数据库报错: 无法打开物理文件 XXX.mdf".操作系统错误 5:& ...

  3. react native 之 在现有的iOS工程中集成react native

    在现有的iOS工程中集成react native, 或者说将react native引入到iOS 项目,是RN和iOS混合开发的必经之路 参考官网教程:https://reactnative.cn/d ...

  4. ORM详解,ORM Object relation mapping (对象关系映射)

  5. Leetcode 1. Two Sum(hash+stl)

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  6. Linux内核源码分析

    Linux源码下载: https://www.kernel.org/ https://git.kernel.org/ Linux内核源码阅读以及工具(转): https://blog.csdn.net ...

  7. Guava 已经学习的代码整理

    Guava 已经学习的代码整理 Guava 依赖: compile group: 'com.google.guava', name: 'guava', version: '18.0' 以下是我自己在开 ...

  8. benchmarks

    系统性能测试 stream SPARK 测试 streaming benchmark https://github.com/yahoo/streaming-benchmarks

  9. 安装U盘启动ferdora-22-fce笔记

    如何格式化为fat? windows图形界面格式化, 选项中没有fat, 只有fat32和exfat两种upan格式 Fat就是 传统的FAT16 要格式化为fat, 需要使用cmd的format命令 ...

  10. Mac开机自动运行shell脚本

    1.首先写一个sh脚本,比如: cd ~/Documents mkdir haha 代码很简单,进入Documents文件夹,建立haha目录,保存为run.sh 2.修改run.sh权限 sudo ...