通过代理模式(包一层),实现对业务增加功能如日志,异常处理,缓存结果,到达不破坏原有的业务代码,扩展了功能

 

通过代理模式(包一层),来实现对业务增加功能如日志,异常处理,缓存结果,感觉挺好的,到达不破坏原有的业务代码,扩展了功能

/// <summary>
/// 包一层:没有什么技术问题是包一层不能解决的,如果有,就再包一层
/// 比如来个日志记录,可以避免修改业务类,只需要修改代理类
/// 再来个异常处理
/// 再来个性能提升--缓存结果-单例
///
/// 通过代理,能够为对象扩展功能(不是增加业务)而不去修改原始业务类,也就是包了一层, 
 
public class ProxySubject : ISubject
{
//组合一下
private static ISubject _Subject = new RealSubject();
public void DoSomething()
{
try
{
Console.WriteLine("prepare DoSomething...");
_Subject.DoSomething();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw ex;
}
}

private static Dictionary<string, bool> ProxyDictionary = new Dictionary<string, bool>();
public bool GetSomething()
{
try
{
Console.WriteLine("prepare GetSomething...");
string key = "Proxy_GetSomething";
bool bResult = false;
if (!ProxyDictionary.ContainsKey(key))
{
bResult = _Subject.GetSomething();
ProxyDictionary.Add(key, bResult);
}
else
{
bResult = ProxyDictionary[key];
}
return bResult;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw ex;
}
}
}

posted @ 2021-02-19 21:09  大树2  阅读(39)  评论(0编辑  收藏  举报