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

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

    /// <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;
    }
    }
    }

  • 相关阅读:
    mongodb 聚类查询 筛选时间
    异步线程
    性能优化
    何谓引继(引继码,继承码)?了解引继同备份不同,请注意!
    apktool 无法识别 requestLegacyExternalStorage 属性导致回编失败
    Jenkins GIT_SSH组件权限导致build失败的问题。
    Linux下 Nginx-uWSGI-Django 搭建
    SSH scp使用
    Django创建app及创建数据库
    正则表达式
  • 原文地址:https://www.cnblogs.com/csj007523/p/14418103.html
Copyright © 2011-2022 走看看