Net设计模式实例之单例模式( Singleton Pattern)(2

四.实例分析(Example

1、场景

Mail 发送机制中,需要对已经发送的消息做 Log 。同一时间内只允许一个进程对 Txt 文档进行操作,此时使用单例模式比较合适。结构 如下图所示
Net设计模式实例之单例模式( Singleton Pattern)(2_第1张图片
 
WriteMai lL og(string message) 方法:纪录 Mail 发送日志到文件 .
_helper _fileLock :程序运行时,创建 2 个静态只读的进程辅助对象

2、代码

1 、类 Mai lL og
public class Emai lL og
{
    private static object _helper = new object ();
    private static Emai lL og _instance;
    private static object _fileLock = new object ();
 
    private Emai lL og()
    {}
 
    public static Emai lL og GetInstance()
    {
        lock (_helper)
        {
            if (_instance == nu ll )
            {
                _instance = new Emai lL og ();
            }
        }
        return _instance;
    }
 
    /// <summary>
    /// 发送Mail 日志
    /// </summary>
    /// <param name="message"> 信息 </param>
    public void WriteEmai lL og(string message)
    {
        string filePath = System.AppDomain .CurrentDomain.BaseDirectory + "mail.txt" ;
        StreamWriter sw = nu ll ;
        FileStream fs = nu ll ;
        lock (_fileLock)
        {
            if (!File .Exists(filePath))
            {
                fs = System.IO.File .Create(filePath);
                sw = new StreamWriter (fs, Encoding .UTF8);
                sw.WriteLine("--------------------------------------------------------------------------" );
                sw.WriteLine(message);
                sw.Flush();
                sw.Close();
            }
            else
            {
                fs = new FileStream (filePath, FileMode .Append);
                sw = new StreamWriter (fs, Encoding .UTF8);
                sw.WriteLine("--------------------------------------------------------------------------" );
                sw.WriteLine(message);
                sw.Flush();
                 sw.Close();
            }
        }
    }
}
 
2 、客户端代码
static void Main (string [] args)
{
    Emai lL og w1 = Emai lL og .GetInstance();
    w1.WriteEmai lL og(" 发送Mail 给灵动生活..." );
    Emai lL og w2 = Emai lL og .GetInstance();
    w2.WriteEmai lL og(" 发送Mail James Hao..." );
}

3、实例运行结果

五、总结(Summary

本文对单例模式( Singleton Pattern )的概念及其设计结构图简单地进行了描述,同样也以一个 Mail 机制的 LOG 实例进行了说明。单例模式是比较常用。比较简单的设计模式。

你可能感兴趣的:(单例模式,designpattern,C#设计模式,Net设计模式,单例模式实例)