代理模式,简而言之就是通过B完成对A的访问
思想很容易理解
假如现在有一个数据表,我们要完成对他的查询,而且这个查询很耗时
现在有一个Query
提供查询
public class Query
{
public string GetData()
{
Thread.Sleep(2000); //模拟耗时
return "查询结果";
}
}
正常查询
static void Main(string[] args)
{
Query query = new Query();
string result = query.GetData();
Console.WriteLine(result);
Console.Read();
}
经过2秒后 我们打印出了查询结果
现在,有新需求了,我们为了改善用户体验,我们在查询前,要告知用户正在查询的信息。这很容易我们可以修改Query
类来达到我们的目的
public class Query
{
public string GetData()
{
Console.WriteLine("正在查询,请稍候......");
Thread.Sleep(2000); //模拟耗时
return "查询结果";
}
}
显然,这很容易,但是需求总是变化的。我们不想每次去改动查询的业务类,因为业务类应该要稳定,我们不应该经常去修改他,所以这时我们就需要一个代理了。
/// <summary>
/// 代理类
/// </summary>
public class QueryProxy
{
private static Query query = new Query(); //单例模式,保证对象只有一个
private QueryProxy() { } //私有化构造函数,确保单例
public static string GetInfo()
{
//这里加入新需求
Console.WriteLine("查询中,请稍候.....");
//具体业务操作
return query.GetData();
}
}
然后直接调用代理类即可,而且在上面的return query.GetData();
之前我们可以随意添加我们的新需求,比如加日志,使用缓存等等
static void Main(string[] args)
{
string result = QueryProxy.GetInfo();
Console.WriteLine(result);
Console.Read();
}
总之,通过代理方法,我们可以在不修改业务类的前提下,扩展功能,使项目稳定。