前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之代理模式

设计模式之代理模式

作者头像
beginor
发布2020-08-10 11:29:49
2650
发布2020-08-10 11:29:49
举报
文章被收录于专栏:张志敏的技术专栏

设计模式之代理模式

结构

代理模式
代理模式

说明

Provide a surrogate or placeholder for another object to control access to it.

为其他对象提供一个代理以控制对这个对象的访问。

适用条件

  1. 远程代理: 为一个对象在不同的地址空间提供局部代表;
  2. 虚代理: 根据需要创建开销很大的对象;
  3. 保护代理: 控制对原始对象的访问;
  4. 智能指引: 取代了简单的指针, 并在访问对象时执行一些附加操作。

实现

代码语言:javascript
复制
public interface IImage {

   void DisplayImage();

}

public class RealImage : IImage {

   private readonly string _fileName;

   public RealImage(string fileName) {
      this._fileName = fileName;
      this.LoadImageFromFile();
   }

   private void LoadImageFromFile() {
      Console.WriteLine("Load image from file {0}",     this._fileName);
   }

   public void DisplayImage() {
      Console.WriteLine("Displaying image {0}", this._fileName);
   }

}

public class ProxyImage : IImage {

   private RealImage _realImage;
   private readonly string _fileName;

   public ProxyImage(string fileName) {
      this._fileName = fileName;
   }

   public void DisplayImage() {
      if (this._realImage == null) {
         this._realImage = new RealImage(this._fileName);
      }
      this._realImage.DisplayImage();
   }
}

class Program {

   static void Main(string[] args) {
      IImage image1 = new ProxyImage("HiRes_10MB_Photo1");
      IImage image2 = new ProxyImage("HiRes_10MB_Photo2");

      image1.DisplayImage();
      image1.DisplayImage();
      image2.DisplayImage();
      image2.DisplayImage();

      Console.ReadKey();
   }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计模式之代理模式
    • 结构
      • 说明
        • 适用条件
          • 实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档