QQ登录界面有这样一个选项:记住账号.
这个账号保存在本地的配置文件中,下次登录的时候,用户就不需要重新输入密码。
那么这个功能是如何实现的呢?
下面用C#给出模拟功能的实现,旨在阐述一个重要的设计模式: MVC模式. MVC模式好处多多,详见如下代码:
(需要特别说明的是,用户的QQ号码实际上是保存在硬盘文件中的,即使断电,用户在第二次登录时也可以获得QQ号码。为了简便起见,下面的模拟实现没有考虑从硬盘文件中读写数据,而是直接把用户的QQ号码保存在一个单例中,断电后,单例中的数据当然就不存在了.)
using System;
class Model //模型(负责管理QQNumber)
{
private string QQNumber;
private static Model instance;
private Model()
{
}
public static Model getInstance()
{
if (null == instance) //生成单例
instance = new Model();
return instance;
}
public void setQQNumber(string QQNumber) // setter
{
this.QQNumber = QQNumber;
}
public string getQQNumber() // getter
{
return QQNumber;
}
}
class View //负责与用户交互
{
public void showIntoToUser(string s)
{
Console.WriteLine("QQ number shown in the View is " + s);
}
public string getInfoFromUser()
{
Console.Write("Please input your QQ number:");
return Console.ReadLine();
}
}
class Controller // 负责与Model和View打交道,建立一个桥梁
{
public void setInfoToModel(string s)
{
Model.getInstance().setQQNumber(s);
}
public string getInfoFromModel()
{
return Model.getInstance().getQQNumber();
}
public void giveInfoToView(string s)
{
View v = new View();
v.showIntoToUser(s);
}
public string getInfoFromView()
{
View v = new View();
return v.getInfoFromUser();
}
}
class Example
{
static void Main()
{
Controller c = new Controller();
string s1 = c.getInfoFromView(); //用户第一次输入QQ号码
c.setInfoToModel(s1); //用户点击“记住账号”后
string s2 = c.getInfoFromModel(); //从Model中取出数据QQ号码
c.giveInfoToView(s2); //把QQ号码显示在View上
Console.WriteLine( "QQ number stored in the Model is " + Model.getInstance().getQQNumber() );
}
}
程序结果如下:
Please input your QQ number:123456789
QQ number shown in the View is 123456789
QQ number stored in the Model is 123456789