C# Design Patterns (4) - Proxy
2009-07-06 07:07:20 来源:WEB开发网02_VirtualProxy_Image / Program.cs
using System;
using com.cnblogs.WizardWu.Sample02;
//客户端程序
class Program
{
static void Main(string[] args)
{
//当文档被打开时,ImageProxy 对象会代替(代理) Image 对象被载入
IGraphic image1 = new ImageProxy("风景图.jpg");
Console.WriteLine("文档被打开,真实的图片尚未被载入.");
Console.ReadLine();
Console.WriteLine("用户已把滚动条滚到特定页数,图片此时才从硬盘载入.");
image1.draw(); //真正要显示图片了
Console.ReadLine();
}
}
//服務器端程序
namespace com.cnblogs.WizardWu.Sample02
{
//此为「代理者、被代理者」共同的接口
public interface IGraphic
{
//用来画图的方法
void draw();
}
//被代理者。真实的对象,把复杂性封装在此
public class Image : IGraphic
{
private byte[] data;
public Image(String fileName) //构造函数
{
//载入图片。把复杂性封装起来
//data = loadImage(fileName);
Console.WriteLine("开始载入图片...");
}
public void draw()
{
//绘制图片在屏幕上。把复杂性封装起来
//drawToScreen(data);
Console.WriteLine("图片已成功绘制在屏幕上.");
}
}
//代理者
public class ImageProxy : IGraphic
{
private String fileName;
private Image image;
public ImageProxy(String filename) //构造函数
{
this.fileName = filename;
image = null;
}
//等到真正要显示图片了,这个 ImageProxy 的 draw 方法才会被调用,
//此时才会真正去创建 Image 对象,并从硬盘中载入图片
public void draw()
{
//虚拟代理。仅在方法第一次被调用时,才创建资源消耗大的 Image 对象
if (image == null)
{
image = new Image(fileName);
}
//实际去绘制图片在萤幕上
image.draw();
}
}
} // end of namespace
/*
执行结果:
文档被开启,真实的图片尚未被载入.
用户已把滚动条滚到特定页数,图片此时才从硬盘载入.
开始载入图片...
图片已成功绘制在屏幕上.
*/
更多精彩
赞助商链接