单例模式:一个类可以创建N个对象,但有时候需要一个类至始至终就一个对象,一般用于这种所有人看到的内容都是一样的这种情况,比如登陆上下文信息。
一个类有时候要保证它只有一个实例,昨天的代码中我们把该类的构造函数设置成了私有的,这样使用它的人就不能直接创建这个类的对象了。我们又提供了一个方法,getInstance这个方法保证负责每次都只返回同一个实例,而这个实例就是放在了上面你截图的对象中的静态属性中了 private static UserContext m_userContext;
刚才说的那个就是设计模式中的单例模式,就是保证一个类始终只有一个对象,关键要点就是类有一个静态私有成员,类型是它自己;该类的构造函数是私有的,不让使用者创建对象;然后在提供一个静态的方法,来获取内部的那个唯一的私有静态属性。
/// <summary>
/// 登录上下文,用户保存登录信息
/// </summary>
public class UserContext
{
//定义一个静态的自己的对象,用于保存唯一的实例(实例=对象)
private static UserContext m_userContext;
private string m_userName;
/// <summary>
/// 属性是只读的,不能随便修改
/// </summary>
public string UserName
{
get { return m_userName; }
}
private string m_Pwd;
public string Pwd
{
get { return m_Pwd; }
set { m_Pwd = value; }
}
/// <summary>
/// 私有的构造函数,外无法创建该对象的实例,这样别人就不能new 这个类了 ,因为私有的方法只有自己类内部调用
/// </summary>
private UserContext()
{
}
private UserContext(string userName, string pwd)
{
this.m_userName = userName;
this.m_Pwd = pwd;
}
/// <summary>
///创建用户上下文类的方法,如果存在该对象的话,就直接返回,保证始终只有一个对象,第一次创建对象的时候使用
/// </summary>
/// <param name="userName"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public static void CreateInstance(string userName, string pwd)
{
if (m_userContext == null)
{
m_userContext = new UserContext(userName, pwd);
}
}
/// <summary>
/// 返回对象时使用
/// 第一次调用CreateInstance存入数据,之后用GetInstance获取数据
/// </summary>
/// <returns></returns>
public static UserContext GetInstance()
{
if (m_userContext == null)
{
throw new Exception("请先使用CreateInstance函数创建对象!");
}
return m_userContext;
}
}