代理(Proxy)模式
- 大数据调用
- 大计算
- 远程计算机访问
- 限制访问权限
应用实例1
using System;
using System.Drawing;
namespace Proxy
{
/// <summary>
/// Summary description for Imager.
/// </summary>
public interface Imager
{
Image getImage();
}
}
using System.Drawing;
namespace Proxy
{
/// <summary>
/// Summary description for Imager.
/// </summary>
public interface Imager
{
Image getImage();
}
}
using System;
using System.Drawing;
namespace Proxy
{
/// <summary>
/// Summary description for QuickImage.
/// </summary>
public class QuickImage : Imager
{
public QuickImage() { }
public Image getImage()
{
return new Bitmap("Box.gif");
}
}
}
using System.Drawing;
namespace Proxy
{
/// <summary>
/// Summary description for QuickImage.
/// </summary>
public class QuickImage : Imager
{
public QuickImage() { }
public Image getImage()
{
return new Bitmap("Box.gif");
}
}
}
using System;
using System.Drawing;
namespace Proxy
{
/// <summary>
/// Summary description for FinalImage.
/// </summary>
public class FinalImage : Imager
{
public FinalImage() { }
public Image getImage()
{
return new Bitmap("flowrtree.jpg");
}
}
}
using System.Drawing;
namespace Proxy
{
/// <summary>
/// Summary description for FinalImage.
/// </summary>
public class FinalImage : Imager
{
public FinalImage() { }
public Image getImage()
{
return new Bitmap("flowrtree.jpg");
}
}
}
using System;
using System.Drawing;
using System.Threading;
namespace Proxy
{
/// <summary>
/// Summary description for ImageProxy.
/// </summary>
public class ImageProxy
{
private bool done;
private Timer timer;
//-----
public ImageProxy()
{
//定时调用方法,如果调用成功则进行标记
//5000为延迟
timer = new Timer(new TimerCallback(timerCall), this, 10000, 0);
}
//-----
private void timerCall(object obj)
{
done = true;//如果调用成功则进行标记
timer.Dispose();
}
//-----
public Image getImage()
{
Imager img;
if (done)
img = new FinalImage();
else
img = new QuickImage();
return img.getImage();
}
}
}
using System.Drawing;
using System.Threading;
namespace Proxy
{
/// <summary>
/// Summary description for ImageProxy.
/// </summary>
public class ImageProxy
{
private bool done;
private Timer timer;
//-----
public ImageProxy()
{
//定时调用方法,如果调用成功则进行标记
//5000为延迟
timer = new Timer(new TimerCallback(timerCall), this, 10000, 0);
}
//-----
private void timerCall(object obj)
{
done = true;//如果调用成功则进行标记
timer.Dispose();
}
//-----
public Image getImage()
{
Imager img;
if (done)
img = new FinalImage();
else
img = new QuickImage();
return img.getImage();
}
}
}