这是Singleton +延迟加载吗?

时间:2018-07-31 21:47:01

标签: c# session design-patterns singleton lazy-loading

public class UserSession
{
   private UserSession()
   {
   }

   public static UserSession Current
   {
       get
       {
           var session= (UserSession)HttpContext.Current.Session["_userSession"];
           if (session == null)
           {
               session = new UserSession();
               HttpContext.Current.Session["_userSession"] = session;
           }
           return session;
       }
   }

   public User User { get; set; }
}

//USAGE
UserSession.Current.User

我试图弄清楚此代码中使用了哪些模式。 我的理解是,这是

  1. Singleton模式(实际上有一个私有构造函数)和一个
  2. 延迟加载(或延迟初始化?),因为实现GET的方式。

我也对

感到困惑
  1. 与类相同的UserSession属性,用法本身对我来说很奇怪。

有人可以解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

在这里我看到单例模式: 如果类的静态方法不存在,则会生成类实例

对于LazyLoading,我不确定是否可以看到这样的内容,因为延迟加载的想法是节省资源,但是在这里我们可以看到轻量级的对象

使用类的静态方法来获取同一类的实例是一种常见做法,但不是最佳方法。更好的选择是使用上下文获取类的实例并避免使用静态方法,因为可以从应用程序的任何位置调用它,但是在这里我们面对的是HttpContext。当前静态属性在我看来是设计问题,因此我们可以使用这样的UserContext