极速理解设计模式系列:3.代理模式(Proxy Pattern)

简介:

三个角色:实体接口(Subject),真实实体(RealSubject),代理实体(Proxy)

       实体接口(Subject):目标对象的抽象接口

       真实实体(RealSubject):目标对象的具体实现.

          代理实体(Proxy):同样实现Subject接口,但是在方法内部是调用真实实体的相应方法实现功能点,而非代理类自己去处理事务。


         实现思路:真实实体和代理实体都继承并且实现同一个接口,在客户端调用代理实体以达到调用真实实体的目的。

 类图:       


        应用场景:在Silverlight中会用到WebService服务,WebService的原理是在客户端本地生成一个代理类,客户端调用WebService方法的时候,通过代理类去访问真实类的结果,这是代理模式中的远程代理模式。

        分析:真实WebService类是部署在服务器上面的,本地需要有一个类来代理服务器上得WebService类的各种功能方法,实际上本地代理类并没有具体的处理过程,它是让服务器端的相应的真实实体类的对应方法运行。

        下面我们在控制台程序去演示一下如何使用Proxy Pattern:

        一、实体接口(Subject)

 


  
  
  1. /// <summary> 
  2. /// 统一接口 
  3. /// </summary> 
  4. interface IWebService 
  5.     void FirstMethod(); 
  6.     void SecendMethod(); 
       二、真实实体(RealSubject)

 


 
 
  1. class WebServiceTrue:IWebService 
  2.     public void FirstMethod() 
  3.     { 
  4.         Console.WriteLine("第一个实体方法"); 
  5.     } 
  6.  
  7.     public void SecendMethod() 
  8.     { 
  9.         Console.WriteLine("第二个实体方法。"); 
  10.     } 

        三、代理实体(Proxy)

 


 
 
  1. class WebServiceProxy:IWebService 
  2.     IWebService webSerTrue; 
  3.     /// <summary> 
  4.     /// 构造函数 
  5.     /// </summary> 
  6.     public WebServiceProxy() 
  7.     { 
  8.         webSerTrue = new WebServiceTrue(); 
  9.     } 
  10.     /// <summary> 
  11.     /// 调用真实类的第一个方法 
  12.     /// </summary> 
  13.     public void FirstMethod() 
  14.     { 
  15.         webSerTrue.FirstMethod(); 
  16.     } 
  17.  
  18.     /// <summary> 
  19.     /// 调用真实类的第二个方法 
  20.     /// </summary> 
  21.     public void SecendMethod() 
  22.     { 
  23.         webSerTrue.SecendMethod(); 
  24.     } 

        四、客户端

 


 
 
  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         //直接使用代理类运行即可 
  5.         WebServiceProxy webProxy = new WebServiceProxy(); 
  6.         webProxy.FirstMethod(); 
  7.         webProxy.SecendMethod(); 
  8.         Console.ReadLine(); 
  9.     } 

        如需源码请点击 ProxyPattern.rar 下载。


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/826943


相关文章
|
8月前
|
设计模式 Java 数据库连接
【设计模式】【结构型模式】代理模式(Proxy)
一、入门 什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,允许你提供一个代理对象来控制对另一个对象的访问。 代理对象在客户端和目标对象之间起到中介作用,可以在不改变目标对
247 10
|
10月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
12月前
|
设计模式 缓存 Java
「全网最细 + 实战源码案例」设计模式——代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,通过代理对象控制对目标对象的访问并添加额外功能。它分为静态代理和动态代理,后者包括JDK动态代理和CGLIB动态代理。JDK动态代理基于接口反射生成代理类,而CGLIB通过继承目标类生成子类。代理模式适用于延迟初始化、访问控制、远程服务、日志记录和缓存等场景,优点是职责分离、符合开闭原则和提高安全性,缺点是增加系统复杂性。
300 25
|
设计模式 前端开发 数据安全/隐私保护
前端必须掌握的设计模式——代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,通过引入“替身”对象来间接访问真实对象,从而解耦并提升性能和安全性。例如,知名艺人复出后,经纪人作为代理筛选商单,确保只处理符合团队利益的请求。代码实现中,定义接口`IService`,艺人和经纪人都实现该接口,经纪人在访问时进行过滤和转发。代理模式常用于权限控制、性能优化等场景,如前端中的Tree-shaking和ES6的Proxy构造方法。
前端必须掌握的设计模式——代理模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
设计模式 缓存 安全
设计模式——代理模式
静态代理、JDK动态代理、Cglib 代理
设计模式——代理模式
|
设计模式 Java 数据安全/隐私保护
Java设计模式-代理模式(7)
Java设计模式-代理模式(7)
133 2
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
8月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
253 16
|
8月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
247 0